Il existe une option JSLint , une des bonnes parties en fait, qui "[requiert] des parenthèses autour des invocations immédiates", ce qui signifie que la construction
(function () {
// ...
})();
devrait plutôt être écrit comme
(function () {
// ...
}());
Ma question est la suivante - quelqu'un peut-il expliquer pourquoi cette deuxième forme pourrait être considérée comme meilleure? Est-ce plus résilient? Moins sujet aux erreurs? Quel avantage a-t-il sur la première forme?
Depuis que j'ai posé cette question, j'en suis venu à comprendre l'importance d'avoir une distinction visuelle claire entre les valeurs de fonction et les valeurs de fonctions. Prenons le cas où le résultat de l'appel immédiat est le côté droit d'une expression d'affectation:
var someVar = (function () {
// ...
}());
Bien que les parenthèses les plus extérieures soient syntaxiquement inutiles, la parenthèse ouvrante donne une indication initiale que la valeur attribuée n'est pas la fonction elle-même mais plutôt le résultat de la fonction appelée.
Ceci est similaire au conseil de Crockford concernant la capitalisation des fonctions du constructeur - il est destiné à servir de repère visuel à quiconque regarde le code source.