2012-04-10 13 views
-4

Wie unterscheidet sich diese Codebeispiel von einer normalen Funktionsdeklaration gepaart mit einer if-Anweisung für den Ereignisauslöser? Ist die Kürze der einzige Vorteil?Was ist "function()" in Javascript?

xmlhttp.onreadystatechange=function() 
{ 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText; 
    } 
    } 
+2

Bakudan: Es wird nicht einmal ausgeführt. Es wird ausgeführt, wenn das Ereignis ausgelöst wird. Das ist normalerweise mehr als einmal, und der obige Code wird (ohne Fehler) mehrfach ausgelöst. – Shane

+0

Ich bin mir nicht sicher, was du da sagst. Anonyme Funktionen können bei entsprechendem Zugriff beliebig oft aufgerufen werden. Siehe mein Kommentar unten, das zweite Beispiel. Sie können die letzte Zeile so oft wie möglich kopieren. Es gibt keine unmittelbare Grenze für die Häufigkeit, mit der eine anonyme Funktion aufgerufen werden kann. – Shane

+0

@Bakudan: Nein, du meinst selbst exitutierende (meist anonymus) Funktionsausdrücke. Jede Funktion, auf die Sie verweisen, kann mehrfach ausgeführt werden. – Bergi

Antwort

3

In Javascript haben Sie möglicherweise, was eine anonyme Funktion genannt wird. In dem obigen Code wird die anonyme Funktion ausgeführt, wenn das Ereignis xmlhttp.onreadystatechange ausgelöst wird. Weitere Beispiele sind:

window.onkeypress = function(e) { 
    alert(String.fromCharCode(e.which)); 
} 

Oder Sie könnten eine anonyme Variable-Funktion ...

var myFunc = function(msg) { // Create function and assign to var 
    alert(msg); 
} 
myFunc("Hello World");   // Call new 'function' 
+1

Vielen Dank für das Verständnis der Frage und für eine präzise und korrekte Antwort. Es ist erstaunlich für mich, wie wenige es geschafft haben. – Aerovistae

+0

Hoffe es hilft :) – Shane

1

Seine repräsentieren die Funktion, die für das gegebene Ereignis aufgerufen wird auftritt.

In Ihrem Kontext, wenn das xmlhttp.onreadystatechange= Ereignis auftritt, wird der function() Block ausgeführt.

Sie können dies auch als

xmlhttp.onreadystatechange=myfunction; 

function myfunction() 
{ 
//code to execute 
} 
+0

Diese Äquivalenz wollte ich bestätigen. Vielen Dank. – Aerovistae

+0

@Aerovistae - Sie sind willkommen und danke für die Verbesserung –

0

schreiben Es ist eine Funktion. Stellen Sie sich einen Code vor, der zu einem späteren Zeitpunkt ausgeführt werden kann.

+0

Sie haben überhaupt nicht darüber nachgedacht. Siehe andere Antworten für "Tipps zur Verbesserung." – Aerovistae

1

Es ist normal, Funktion, die onreadystatechange Eigenschaft xmlhttp Objekt zugeordnet und kann mit ausgelöst werden:

xmlhttp.onreadystatechange(); 

Siehe das Tutorial:

mehr zu wissen darüber.

Sie sollten wirklich Grundlagen lernen zuerst :)

+0

Also, wenn Sie es nennen, wiederholt es die ganze Arbeit noch einmal? – kommradHomer

+0

@kommradHomer: Sobald eine Funktion erstellt wurde, kann sie so oft wie nötig aufgerufen werden. Denn dafür gibt es Funktionen. – Sarfraz

+0

Was ist, wenn es einen Wert zurückgibt? ein Wert, der an nichts gebunden ist und immer gleich wird? – kommradHomer

1

Javascript unterstützt die anonyme Funktion Objekt. Wenn Sie einen Codeblock für ein Ereignis ausführen möchten, müssen Sie ihn in eine Funktion einfügen. Wenn Sie dafür keine spezielle Funktion benötigen (Sie möchten den Code nicht wiederverwenden), können Sie Ihre Funktion anonym lassen.

xmlhttp.onreadystatechange = function() { ... } 

Es ist ähnlich wie dies mit zu tun:

function foo() { ... } 
xmlhttp.onreadystatechange = foo; 

aber in diesem Fall können Sie foo wieder verwenden, wo immer Sie es brauchen.

0

function(){...} ist ein namenloser ("anonymous") function expression. Wenn Sie es einer Variablen zuweisen oder als Argument verwenden, benötigt es keinen Namen. In Ihrem Beispiel ordnen Sie dieses Funktionsobjekt einer Handler-Eigenschaft des xhr-Objekts zu, wo es als Callback verwendet wird.

2

Die Kennung Funktion ist ein reserviertes Wort erstellen, das der Beginn entweder eine FunctionDeclaration ist oder Funktion Ausdruck.Wenn es zu Beginn einer Anweisung ist (oder genauer gesagt, in einem Ort, wo eine Aussage sein kann), wird es als FunctionDeclaration interpretiert und muss von der Form:

function <name> (<parameter list>) { <function body> } 

der Name in einem Funktionsdeklaration ist erforderlich.

Wenn es nicht am Anfang einer Anweisung ist, ist es ein FunctionExpression und der Name ist optional, z. es kann sein:

(function() {…}) 

var a = function() {…}; 

someFunction(function() {…}) 

und so weiter. In allen Fällen gibt es einen Verweis auf die Funktion zurück, die zugewiesen (z. B. an eine Variable), aufgerufen, an eine andere Funktion übergeben oder ignoriert werden kann.

+0

RobG, das ist eine sehr gute Antwort, aber ich denke, ein bisschen trug Gedanken könnte es in die Vereinfachung für die OP gebracht werden, und jeder andere, der dies in der Zukunft stolpern sollte. Allerdings stimmt für eine ansonsten gute Antwort. – Shane

Verwandte Themen