Warum ist die obige Funktion in Klammern eingeschlossen und warum gibt es am Ende eine ();
?Erklären Sie die folgende JavaScript-Anweisung?
Ich denke, es ist eine Konstruktorfunktion wegen der ();
am Ende, aber warum ist das Objekt in Klammern?
Warum ist die obige Funktion in Klammern eingeschlossen und warum gibt es am Ende eine ();
?Erklären Sie die folgende JavaScript-Anweisung?
Ich denke, es ist eine Konstruktorfunktion wegen der ();
am Ende, aber warum ist das Objekt in Klammern?
Dieser Code entspricht:
function Ninja() {
// nothing here
}
var ninja = new Ninja();
Obwohl in dem Code, den Sie aufgelistet haben, ist die Funktion/das Objekt Ninja kein globaler Bereich.
Der Code (function() {...})();
sagt im Grunde: "Nimm die Funktion, die darin enthalten ist, und führe sie sofort aus". Also wird eine anonyme Funktion erstellt und direkt danach aufgerufen.
Warum ist die Funktionsdeklaration in verkapselter ‚(‘ s und auch, warum ist ein ‚();‘. Am Ende
Sein erklärt und die Funktion zur gleichen Zeit ausgeführt werden
können Sie sehen: Named function expressions demystified - by Juriy "kangax" Zaytsev
Es heißt Immediately-Invoked Function Expression (oder IIFE). Es erstellt einen neuen Bereich und führt den Inhalt sofort aus. Es gibt viele Anwendungen dafür; dasjenige, das ich am meisten benutze, ist, wenn das Schlüsselwort this
die Bedeutung ändern würde, z. in
var someClass = function() {
this.property = something;
this.update = (function(obj) {
function() {
$('.el').each(function() {
$(this).html(obj.property);
});
};
)(this);
};
Während ich this
Änderungen innerhalb der this.property
$('.el').each()
, beziehen möchten innerhalb dieses Umfangs Bedeutung und bezieht sich auf den aktuellen DOM-Element, das mit .each()
durchgeschleift wird. Wenn Sie also this
als Parameter an den IIFE übergeben (und diesen Parameter obj
aufrufen), kann ich obj.property
verwenden, um auf this.property
zu verweisen, wenn außerhalb des Bereichs von $('.el').each(..., function() { ... });
.
Lassen Sie mich wissen, ob das Sinn macht oder wenn Sie Fragen :)
Wie vorgeschlagen: zu verweis Benalman
Sofort-Ausgeführt Funktion Ausdruck (IIFE) Glücklicherweise ist die Syntaxerror „fix“ ist einfach. Die am weitesten verbreitete Methode, dem Parser mitzuteilen, dass er einen Funktionsausdruck erwartet, besteht darin, ihn in Parens einzubinden, da Parens in JavaScript keine Anweisungen enthalten können. Wenn der Parser zu diesem Zeitpunkt auf das Schlüsselwort function stößt, weiß es, dass es als Funktionsausdruck und nicht als Funktionsdeklaration analysiert werden soll.
// Eines der beiden folgenden Muster kann verwendet werden, um sofort // einen Funktionsausdruck aufzurufen, wobei der Ausführungskontext der Funktion zu // create "privacy."
(function() {/ * Code * /}()); // Crockford empfiehlt dieses
(function() {/ * Code * /})(); // Aber das funktioniert genauso gut
Ich würde vorschlagen zu lesen, http://benalman.com/news/2010/11/immediated-invoked-function-expression/ –
Siehe auch: [Wie funktioniert eine anonyme Funktion in JavaScript Arbeit?] (http://stackoverflow.com/questions/1140089/how-does-anonymous-function-in-japascript-work). –
@KevinDeVoe Ihr Duplikat ist besser – Dave