Point-virgule après déclarations de fonctions sont pas nécessaire .
La grammaire d'un FunctionDeclaration
est décrit dans la spécification comme ceci :
function Identifier ( FormalParameterListopt ) { FunctionBody }
Il n'y a pas de point-virgule grammaticalement requis, mais on peut se demander pourquoi ?
Les points-virgules servent à séparer déclarations l'un de l'autre, et un FunctionDeclaration
n'est pas un déclaration .
FunctionDeclarations
sont évalués avant le code entre en exécution, levage est un mot courant pour expliquer ce comportement.
Les termes "déclaration de fonction" et "déclaration de fonction" sont souvent utilisés à tort de manière interchangeable, car aucune déclaration de fonction n'est décrite dans la spécification ECMAScript. Toutefois, certaines implémentations incluent une déclaration de fonction dans leur grammaire, notamment Mozilla, mais là encore, il s'agit d'un système non standard.
Cependant, les points-virgules sont toujours recommandés lorsque vous utilisez FunctionExpressions
. Par exemple :
var myFn = function () {
//...
};
(function () {
//...
})();
Si vous omettez le point-virgule après la première fonction dans l'exemple ci-dessus, vous obtiendrez des résultats totalement indésirables :
var myFn = function () {
alert("Surprise!");
} // <-- No semicolon!
(function () {
//...
})();
La première fonction sera exécutée immédiatement, car les parenthèses qui entourent la seconde seront interprétées comme la fonction Arguments
d'un appel de fonction.
Lectures recommandées :