Funktionswerte in JavaScript

8

nextplease.init = function() {...} ist eine Funktion ohne Argumente. Ich würde nextplease.init und erwarten function() {nextplease.init();} , um sich identisch zu verhalten. Gibt es einen möglichen Unterschied zwischen ihnen (natürlich können Sie nextplease.init etwas zuweisen, aber schließen wir das aus)? Kann es insbesondere einen Unterschied im Verhalten zwischen window.addEventListener("load", nextplease.init, false); und window.addEventListener("load", function() {nextplease.init();}, false); geben?

Der Fehler, den ich finden möchte, ist in Objekte in JavaScript definiert und undefiniert gleichzeitig (in einer FireFox-Erweiterung) Jemand hat vorgeschlagen, dass die Verwendung der ersten Form anstelle der zweiten einen Unterschied machen könnte.

>     
Alexey Romanov 23.02.2010, 17:19
quelle

3 Antworten

4

Ein wichtiger Unterschied ist der Wert des Schlüsselworts "this" im Rumpf der Funktion, auf die nextplease.init verweist.

Nehmen Sie an, dass nextplease wie folgt definiert ist:

%Vor%

Im ersten Beispiel wäre der Wert von "this" das DOM-Objekt und die Warnung würde fehlschlagen:

%Vor%

In der zweiten Form wäre der Wert von "this" das nextplease Objekt und die Warnung würde "hello" sagen:

%Vor%

Verweisen Sie auf die MDC-Dokumentation:

Ссылка

    
Jeff Meatball Yang 23.02.2010, 17:41
quelle
0

Es gibt 2 mögliche Unterschiede

%Vor%

Dies wird die Funktion aufrufen und das ist alles. Wenn Sie Parameter hinzufügen möchten, können Sie diese nicht festlegen.

%Vor%

Auf der anderen Seite können Sie mehr als eine Funktion aufrufen und Parameter einstellen. Es fügt auch zusätzlichen Aufwand beim Aufrufen einer Funktion und Speichern einer Funktion im Speicher hinzu.

    
Gabriel McAdams 23.02.2010 17:23
quelle
0

Diese zwei:

%Vor%

sind fast genau gleich, wenn nextplease.init ein Funktionsobjekt ist.

Der einzige Unterschied besteht darin, dass im zweiten Fall alle Argumente, die an die äußere Funktion übergeben werden (obwohl ihre Signatur keine definiert, sie können dennoch übergeben werden), nicht an nextplease.init() übergeben werden. Da dies jedoch nur die API addEventListener durchläuft, wissen Sie, was im Voraus übergeben wird.

    
friedo 23.02.2010 17:25
quelle

Tags und Links