Versionen vergleichen

Eine Wiedereinführung in JavaScript

Version 510643:

Version 510643 von eminor am

Version 511931:

Version 511931 von eminor am

Titel:
Eine Wiedereinführung in JavaScript
Eine Wiedereinführung in JavaScript
Adressname:
JavaScript/Eine_Wiedereinfuehrung_in_JavaScript
JavaScript/Eine_Wiedereinfuehrung_in_JavaScript
Inhalt:

Version 510643
Version 511931
n703      Functionsn703      Funktionen
n706      Along with objects, functions are the core component in undn706      Neben Objekten, gehören auch Funktionen zu den Kernkomponen
>erstanding JavaScript. The most basic function couldn't be much s>ten von JavaScript. Die einfachste Basisfunktion könnte kaum simp
>impler:>ler sein:<br>
707      &nbsp;
n715      This demonstrates everything there is to know about basic fn716      In dieser Funktion ist alles enthalten, was man zum Versteh
>unctions. A JavaScript function can take 0 or more named paramete>en von einfachen Funktionen wissen muss. Eine JavaScript-Funktion
>rs. The function body can contain as many statements as you like,> kann 0 oder mehr benannte Argumente entegegennehmen. Der Funktio
> and can declare its own variables which are local to that functi>nskörper kann beliebig viele Anweisungen enthalten und innerhalb 
>on. The <code>return</code> statement can be used to return a val>dieses Blocks können eigene lokale Variablen definiert werden, di
>ue at any time, terminating the function. If no return statement >e nur innerhalb der Funktion zugänglich sind. Mit der <code>retur
>is used (or an empty return with no value), JavaScript returns <c>n</code>-Anweisung wird an beliebiger Stelle der Rückgabewert fes
>ode>undefined</code>.>tgelegt und die Funktion anschließend terminiert. Lässt man die r
 >eturn-Anweisung weg (oder gibt keinen Rückgabewert an), wird von 
 >JavaScript <code>undefined</code> zurückgegeben.
716    </p>
717    <p>717    </p>
718      The named parameters turn out to be more like guidelines th718    <p>
>an anything else. You can call a function without passing the par 
>ameters it expects, in which case they will be set to <code>undef 
>ined</code>. 
719      Die benannten Parameter sind eher wie Richtlinien und nicht
 > etwa wie Pflichtangaben zu verstehen. Eine Funktion lässt sich a
 >uch ohne Angabe der erwarteten Parameter aufrufen. Die Werte dies
 >er Parameter sind dann <code>undefined</code>.
n722NaN // You can't perform addition on undefinedn723NaN // Addition mit undefined nicht möglich
n725      You can also pass in more arguments than the function is exn726      Der Funktion können auch mehr als nur die erwarteten Parame
>pecting:>nter übergeben werden:
n7295 // added the first two; 4 was ignoredn7305 // Addition der ersten beiden Parameter, der dritte wird ignori
 >ert
n732      That may seem a little silly, but functions have access to n733      Auf den ersten Blick mag es etwas komisch erscheinen, doch 
>an additional variable inside their body called <a href="/en/Java>Funktionen haben innerhalb des Funktionskörpers Zugriff auf eine 
>Script/Reference/Functions_and_function_scope/arguments" title="E>zusätzliche Variable mit dem Namen <a href="/en/JavaScript/Refere
>n/Core_JavaScript_1.5_Reference/Functions_and_function_scope/argu>nce/Functions_and_function_scope/arguments" title="En/Core_JavaSc
>ments"><code>arguments</code></a>, which is an array-like object >ript_1.5_Reference/Functions_and_function_scope/arguments"><code>
>holding all of the values passed to the function. Let's re-write >arguments</code></a>, wobei es sich um ein arrayähnliches Objekt 
>the add function to take as many values as we want:>handelt, welches alle Werte enthält, die an die Funktion übergebe
 >n wurden. Hier eine abgeänderte Version unserer <code>add()</code
 >>-Funktion, die beliebig viele Werte entgegennimmt und addiert:
n747      That's really not any more useful than writing <code>2 + 3 n748      Die Verwendung dieser Funktion ist allerdings nicht viel ko
>+ 4 + 5</code> though. Let's create an averaging function:>mfortabler als wenn man einfach 2 + 3 + 4 + 5 schreiben würde. Da
 >s ändert sich jedoch, wenn die Funktion komplexere Aufgaben erled
 >igen soll, wie etwa dies Funktion für die Berechnung eines Durchs
 >chnitts:
n761      This is pretty useful, but introduces a new problem. The <cn762      Diese Funktion ist sehr praktisch, weist jedoch ein neues P
>ode>avg()</code> function takes a comma separated list of argumen>roblem auf: Die avg()-Funktion nimmt eine durch Kommas getrennte 
>ts — but what if you want to find the average of an array? You co>Argumentliste entgegen. Doch wie lässt es sich einrichten, dass m
>uld just rewrite the function as follows:>it der Funktion auch der Durchschnitt für Werte eines Arrays bere
 >chnet werden kann?
763    </p>
764    <p>
765      Wir könnten die Funktion etwas umschreiben:
n775      But it would be nice to be able to reuse the function that n779      Es wäre jedoch besser, wenn wir die erste Funktion wiederve
>we've already created. Luckily, JavaScript lets you call a functi>rwenden könnten. Glücklicherweise ist es bei JavaScript möglich, 
>on and call it with an arbitrary array of arguments, using the <a>eine Funktion mit einem Array von Argumenten aufzurufen, indem ma
> href="/en/JavaScript/Reference/Global_Objects/Function/apply" ti>n auf die Methode <code>apply()</code> zurückgreift, die alle <co
>tle="en/Core_JavaScript_1.5_Reference/Global_Objects/Function/app>de>Function</code>-Objekte besitzen:
>ly"><code>apply()</code></a> method of any function object. 
n782      The second argument to <code>apply()</code> is the array ton786      Das zweite Argument der <code>apply()</code>-Funktion ist d
> use as arguments; the first will be discussed later on. This emp>as Array mit den Argumenten für die Funktion; das erste Argument 
>hasizes the fact that functions are objects too.>(<code>null</code>) wird später erklärt. An diesem Punkt wird deu
 >tlich, dass auch Funktionen Objekte sind.
783    </p>
784    <p>787    </p>
785      JavaScript lets you create anonymous functions.788    <p>
789      JavaScript erlaubt die Erstellung von sogenannten anonymen 
 >Funktionen:
n797      This is semantically equivalent to the <code>function avg()n801      Semantisch ist diese Funktion äquivalent zur <code>function
></code> form. It's extremely powerful, as it lets you put a full > avg()</code>-Schreibweise.
>function definition anywhere that you would normally put an expre 
>ssion. This enables all sorts of clever tricks. Here's a way of " 
>hiding" some local variables — like block scope in C: 
802    </p>
803    <p>
804      Anonyme Funktionen lassen sich überall dort einsetzen, wo m
 >an normalerweise einen Ausdruck verwenden würde. Dadurch sind ein
 >e ganze Reihe verschiedener Tricks möglich. So kann man z.B. loka
 >le Variablen "verstecken", wie bei Block-Scopes in C:
n812      JavaScript allows you to call functions recursively. This in819      JavaScript erlaubt den rekursiven Aufruf von Funktionen, wa
>s particularly useful for dealing with tree structures, such as y>s bei Baumstrukturen, wie z.B. dem <a href="/en/DOM" title="en/DO
>ou get in the browser <a href="/en/DOM" title="en/DOM">DOM</a>.>M">DOM</a> von Browsern, sehr von Vorteil sein kann.
n827      This highlights a potential problem with anonymous functionn834      Hier stoßen wir auf ein mögliches Problem bei anonymen Funk
>s: how do you call them recursively if they don't have a name? Th>tionen: Wie ruft man die Funktion rekursiv auf, wenn sie keinen N
>e answer lies with the <strike><code>arguments</code> object, whi>amen besitzt? <strike>Eine Antwort könnte im <code>arguments</cod
>ch in addition to acting as a list of arguments also provides a p>e> Objekt versteckt sein, denn dieses Objekt besitzt eine Eigensc
>roperty called <code>arguments.callee</code></strike>. The <code>>haft <code>arguments.callee</code>.</strike> Die Eigenschaft ist 
>arguments.callee</code> usage is deprecated and even disallowed i>jedoch als veraltet anzusehen und im scrict-Mode ist der Zugriff 
>n strict mode. Instead, you should use <strike>"named anonymous f>darauf verboten. Stattdessen sollten IIFEs (Immediately Invoked F
>unctions"</strike>&nbsp;named IIFEs (Immediately Invoked Function>unction Expressions) wie folgt eingesetzt werden:
> Expressions) as below: 
n842      The name provided to an anonymous function as above is (or n849      Der Name der anonymen Funktion ist nur innerhalb dem Sichtb
>at least should be) only available to the function's own scope. T>arkeitsbereich der Funktion verfügbar (oder sollte es wenigstens 
>his both allows more optimizations to be done by the engine and a>sein). Diese Vorgehensweise erlaubt der Engine den Code besser zu
> more readable code.> optimieren und der Code ist auch besser lesbar.
n845      Custom objectsn852      Benutzerdefinierte Objekte
n848      <strong>Note:</strong> For a more detailed discussion of obn855      <strong>Anmerkung:</strong> Detaillierte Informationen zu o
>ject-oriented programming in JavaScript, see <a href="/en/JavaScr>bjektorientiertem Programmieren in JavaScript finden Sie in der <
>ipt/Introduction_to_Object-Oriented_JavaScript" title="https://de>a href="/en/JavaScript/Introduction_to_Object-Oriented_JavaScript
>veloper.mozilla.org/en/Introduction_to_Object-Oriented_JavaScript>" title="https://developer.mozilla.org/en/Introduction_to_Object-
>">Introduction to Object Oriented JavaScript</a>.>Oriented_JavaScript">Einführung zu objektorientiertem Programmier
 >en in JavaScript</a>.
n851      In classic Object Oriented Programming, objects are collectn858      Beim klassischen objektorientierten Programmieren sind Obje
>ions of data and methods that operate on that data. JavaScript is>kte Zusammenstellungen von Daten und dem Objekt zugehörigen Metho
> a prototype-based language which contains no class statement, su>den, welche diese Daten verarbeiten. JavaScript ist jedoch eine p
>ch as is found in C++ or Java. (This is sometimes confusing for p>rototypenbasierte Sprache, die - anders als Java oder C++ - keine
>rogrammers accustomed to languages with a class statement.) Inste> Klassen besitzt. Anstatt Klassen werden bei JavaScript Funktione
>ad, JavaScript uses functions as classes. Let's consider a person>n eingesetzt. Angenommen es existiert ein Objekt <code>person</co
> object with first and last name fields. There are two ways in wh>de> mit zwei Feldern, jeweils für den Vor- und Nachnamen, und wir
>ich the name might be displayed: as "first last" or as "last, fir> wollen den Namen auf einer Webseite anzeigen lassen. Dann können
>st". Using the functions and objects that we've discussed previou> wir dies auf zwei verschiedene Weisen tun: Entweder als "Vorname
>sly, here's one way of doing it:> Nachname" oder mit dem Nachnamen zuerst, also "Nachname, Vorname
 >". Benutzen wir die bisher beschriebenen Funktionen und Objekte, 
 >lässt sich dies z.B. so umsetzen:
n873      This works, but it's pretty ugly. You end up with dozens ofn880      Das funktioniert zwar, ist aber keine sehr elegante Lösung,
> functions in your global namespace. What we really need is a way> denn so befinden sich am Ende dutzende verschiedene Funktionen i
> to attach a function to an object. Since functions are objects, >m globalen Namensraum. Was wir wirklich brauchen ist ein Weg, um 
>this is easy:>eine Funktion an ein Objekt anzuhängen, was kein großes Problem d
 >arstellt, da Funktionen bei JavaScript bekanntlich Objekte sind:
n895      There's something here we haven't seen before: the '<code><n902      Hier stoßen wir auf etwas Neues: Das&nbsp;<code><a href="/e
>a href="/en/JavaScript/Reference/Operators/this" title="en/Core_J>n/JavaScript/Reference/Operators/this" title="en/Core_JavaScript_
>avaScript_1.5_Reference/Operators/Special_Operators/this_Operator>1.5_Reference/Operators/Special_Operators/this_Operator">this</a>
>">this</a></code>' keyword. Used inside a function, '<code>this</></code>-Schlüsselwort. Wird es innerhalb einer Funktion benutzt, 
>code>' refers to the current object. What that actually means is >verweist es auf das aktuelle Objekt. Welches Objekt als das Aktue
>specified by the way in which you called that function. If you ca>lle gilt, hängt davon ab, wie die Funktion aufgerufen wurde. Wenn
>lled it using <a href="/en/JavaScript/Reference/Operators/Member_> die Funktion über ein Objekt unter Einsatz der <a href="/en/Java
>Operators" title="en/Core_JavaScript_1.5_Reference/Operators/Memb>Script/Reference/Operators/Member_Operators" title="en/Core_JavaS
>er_Operators">dot notation or bracket notation</a> on an object, >cript_1.5_Reference/Operators/Member_Operators">Punkt- oder Klamm
>that object becomes '<code>this</code>'. If dot notation wasn't u>er-Notation</a> aufgerufen wurde, repräsentiert <code>this</code>
>sed for the call, '<code>this</code>' refers to the global object> dieses Objekt. Wurde zum Aufruf die Punkt-Notation nicht verwend
>. This is a frequent cause of mistakes. For example:>et, dann verweist <code>this</code> auf das globale Objekt. Diese
 > unterschiedliche Zuweisung führt immer wieder zu Fehlern.
903    </p>
904    <p>
905      Hier also ein Beispiel:
tt913    <p>
914      <span style="color:#ff0000;">...</span>
915    </p>

Zurück zur Versionsgeschichte