Es gibt eine JSLint- Option, eine der guten Teile in der Tat, die "Parens um unmittelbare Aufrufe erfordert", was bedeutet, dass die Konstruktion
(function () {
// ...
})();
müsste stattdessen geschrieben werden als
(function () {
// ...
}());
Meine Frage lautet: Kann jemand erklären, warum diese zweite Form als besser angesehen werden könnte? Ist es widerstandsfähiger? Weniger fehleranfällig? Welchen Vorteil hat es gegenüber der ersten Form?
Seit ich diese Frage gestellt habe, habe ich verstanden, wie wichtig es ist, eine klare visuelle Unterscheidung zwischen Funktionswerten und Funktionswerten zu treffen. Stellen Sie sich den Fall vor, in dem das Ergebnis eines sofortigen Aufrufs die rechte Seite eines Zuweisungsausdrucks ist:
var someVar = (function () {
// ...
}());
Obwohl die äußersten Klammern syntaktisch nicht erforderlich sind, gibt die öffnende Klammer im Voraus einen Hinweis darauf, dass der zugewiesene Wert nicht die Funktion selbst ist, sondern das Ergebnis des Aufrufs der Funktion.
Dies ähnelt Crockfords Rat bezüglich der Großschreibung von Konstruktorfunktionen - es soll als visueller Hinweis für jeden dienen, der sich den Quellcode ansieht.
quelle
Antworten:
Aus Douglass Crockfords Style Convention Guide : (Suche nach "sofort aufgerufen")
Wenn eine Funktion sofort aufgerufen werden soll, sollte der gesamte Aufrufausdruck in Parens eingeschlossen werden, damit klar ist, dass der erzeugte Wert das Ergebnis der Funktion und nicht der Funktion selbst ist.
Er ist der Meinung, dass dies die Unterscheidung zwischen Funktionswerten und Funktionswerten klarer macht. Es handelt sich also um eine stilistische Angelegenheit, nicht wirklich um einen wesentlichen Unterschied im Code selbst.
aktualisierte Referenz, alte PPT existiert nicht mehr
quelle
Sofort aufgerufene anonyme Funktionen werden in Parens verpackt, weil:
Sie sind Funktionsausdrücke, und das Auslassen von Parens würde dazu führen, dass sie als Funktionsdeklaration interpretiert werden, die ein Syntaxfehler ist.
Funktionsausdrücke können nicht mit der Wortfunktion beginnen.
Wenn Sie den Funktionsausdruck einer Variablen zuweisen, wird die Funktion selbst nicht zurückgegeben, sondern der Rückgabewert der Funktion
Daher bewerten die Eltern, was in ihnen ist, und produzieren einen Wert.Wenn die Funktion ausgeführt wird und die nachfolgenden Parens..}()
die Funktion sofort ausführen.quelle
Oder verwenden Sie:
quelle