Il existe un JSLint une option, l'une des bonnes parties en fait, qui "[exige] 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-elle plus résiliente ? Moins sujette aux erreurs ? Quel avantage présente-t-elle par rapport à la première forme ?
Depuis que j'ai posé cette question, j'ai compris l'importance d'avoir une distinction visuelle claire entre les valeurs des fonctions et les valeurs des fonctions. Considérons le cas où le résultat de l'invocation immédiate est le côté droit d'une expression d'affectation :
var someVar = (function () {
// ...
}());
Bien que les parenthèses extérieures ne soient pas nécessaires d'un point de vue syntaxique, la parenthèse ouvrante indique d'emblée que la valeur assignée est pas la fonction elle-même, mais plutôt le résultat de la fonction invoquée.
Ce conseil est similaire à celui de Crockford concernant l'emploi de la majuscule pour les fonctions de constructeur - il est destiné à servir de repère visuel à toute personne regardant le code source.