Es gibt eine JSLint Option, eine der guten Teile in der Tat, dass „Pars um sofortige Anrufungen [erfordert]“, was bedeutet, dass der BauImmediate Funktion Invokationssyntax
(function() {
// ...
})();
stattdessen müssen geschrieben werden
Meine Frage ist das - kann jemand erklären, warum diese zweite Form besser betrachtet werden könnte? Ist es belastbarer? Weniger fehleranfällig? Welchen Vorteil hat es gegenüber der ersten Form?
Da diese Frage, ich bin gekommen, die Bedeutung eine klare visuelle Unterscheidung zwischen Funktionswerten und den Werten der Funktionen zu verstehen. Betrachten wir den Fall, wo das Ergebnis der sofortigen Aufruf ist die rechte Seite eines Zuweisungs expression:
var someVar = (function() {
// ...
}());
Obwohl die äußersten Klammern syntaktisch nicht notwendig sind, gibt die öffnende Klammer eine Upfront-Anzeige, dass der Wert zugeordnet ist, ist nicht die Funktion selbst, sondern das Ergebnis der aufgerufenen Funktion.
Dies ist vergleichbar mit Crockfords Ratschlag bezüglich der Großschreibung von Konstruktorfunktionen - es soll jedem, der sich den Quellcode anschaut, als visueller Hinweis dienen.
Dank für diesen Hinweis. Ich habe nie einen Weg gefunden, wie ich JSLints Warnmeldung "Seien Sie vorsichtig beim Erstellen von Funktionen innerhalb einer Schleife" loswerden kann. Ich war vorsichtig und stellte die Funktion in eine Schließung, aber JSLint beschwerte sich immer noch. Jetzt weiß ich, dass es angenommen hat, dass ich das zweite Muster verwendet habe. –
Siehe auch [Unterschied zwischen (function() {})(); und function() {}();] (http://stackoverflow.com/q/423228/1048572) und mögliche Duplikate [Position von Klammern für die automatische Ausführung anonymer JavaScript-Funktionen?] (http://stackoverflow.com/ q/3384504/1048572) – Bergi