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.
>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:
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.
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.
Tags und Links javascript closures