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.