Unterschiede zwischen Javascript-Funktion

7

Ich weiß, dass diese Frage dumm sein könnte, möchte nur wissen, und ich bin mir nicht sicher, ob das Thema zu meiner aktuellen Frage passt. Aber immer noch gedacht, es zu fragen.

%Vor%

Ich sehe die erste "Funktion" wird nicht beim Laden oder Aktualisieren der Seite ausgelöst, sondern als zweite fire () ausgelöst wird  Wenn die Seite geladen wird, wird diese Funktion später beim Klicken nicht ausgelöst. Ich bin verwirrt, brauche nur Klarstellungen in diesem.

    
user3556610 06.06.2014, 19:07
quelle

3 Antworten

7

Der zweite wird sofort ausgelöst, weil Sie die Klammer () verwendet haben. Wenn Sie einer vorhandenen Funktion einen Ereignishandler zuweisen, dürfen Sie die Klammern nicht verwenden.

Was passiert, ist, dass die Funktion sofort ausgeführt wird und der Rückgabewert als Event-Handler zugewiesen wird.

Um es zu veranschaulichen, ist es dasselbe wie:

%Vor%

Wie Sie sehen können, wird undefined als Event-Handler übergeben.

    
MrCode 06.06.2014, 19:08
quelle
13

Sie müssen fire an onclick als Funktionsreferenz und nicht als Aufruf übergeben.

%Vor%

Wenn Sie fire() an den onclick-Handler übergeben, wird dieser sofort ausgelöst, und der Rückgabewert der Funktion ist auch der, auf den Sie klicken. Wenn ein Verweis auf die Funktion übergeben wird, wird die Ausführung gestoppt, bis das Ereignis ausgelöst wird. Es ist im Wesentlichen das gleiche wie die anonyme Funktion Handler oben.

rlemon war nett genug, um dir eine schöne Demonstration zu machen Geige & lt; - hier

    
Sterling Archer 06.06.2014 19:08
quelle
3

Ich möchte auch noch ein paar weitere Dinge hinzufügen.

Denken Sie zunächst an onclick als gewöhnliche Eigenschaft eines Objekts.

Also, object.onclick = value wo value = functionName() ist vollkommen in Ordnung, zum Beispiel könnte functionName() einen Wert zurückgeben mit return something;

Aber onclick ist keine gewöhnliche Eigenschaft. Wenn JS-Engine im Browser trifft Zuordnungen zu ereignisbasierten Eigenschaften (z. B. onclick , ondblclick , onmouseover usw.), erstellt für jeden einen Stapel Element, bestehend aus Mapping s / w onSomeEvent und -Handler

Der Handler ist ein Funktionsobjekt. Aber wenn du sowas tust element.onSomeEvent = functionName(); Sie rufen einfach den Funktion functionName() und das wäre in Ordnung gewesen, wenn functionName() wurde als

definiert %Vor%

Aber weil functionName in Ihrem Fall keine Funktion zurückgibt, sehen Sie ein unerwartetes Ergebnis. Das ist das Wichtigste Nachteil von Sprachen wie JavaScript. In einer stark typisierten Sprache hätte das einen Fehler geworfen ... weil

%Vor%     
divyaSharma 06.06.2014 19:33
quelle

Tags und Links