Point-virgule pour la sécurité dans les IIFE
Supposons maintenant que notre fonction immédiatement invoquée ne commence pas par un plus, mais soit entourée de parenthèses, comme ceci :
(function() {
console.log(1); // affichera 1
})();
Supposons que la variable num soit définie à l'extérieur
de la fonction :
let num = 1; // le point-virgule est présent
(function() {
console.log(num); // affichera 1
})();
Supposons maintenant que nous ayons oublié de mettre le point-virgule :
let num = 1
(function() {
console.log(num); //!! générera une erreur
})();
Il s'avère que ce code générera une erreur, car JavaScript perçoit notre fonction comme une continuation de l'instruction de la première ligne.
Pour éviter de tels problèmes, avant d'appeler une fonction immédiatement invoquée, il est toujours nécessaire de mettre un point-virgule, comme ceci :
let num = 1
;(function() {
console.log(num); // affichera 1
})();
Il peut sembler que le problème soit quelque peu artificiel. En réalité, ce n'est pas le cas. Il peut y avoir une situation où plusieurs scripts provenant de fichiers distincts sont inclus sur votre page. Dans ce cas, un point-virgule peut être omis à la fin d'un fichier et cela conduira automatiquement à un problème si le deuxième fichier commence par l'appel d'une fonction immédiatement invoquée.
Par conséquent, mettez toujours - toujours - un point-virgule avant d'appeler une fonction immédiatement invoquée, même si vous êtes certain à ce moment-là qu'il n'y aura pas de problème. Ils peuvent survenir plus tard.
Appliquons ce qui précède et appelons la fonction immédiatement invoquée, en mettant un point-virgule au début :
;(function() {
console.log(1); // affichera 1
})();
Déterminez, sans exécuter le code, ce qui sera affiché dans la console :
let str = 'str';
(function() {
console.log(1);
})();
Déterminez, sans exécuter le code, ce qui sera affiché dans la console :
let str = 'str'
(function() {
console.log(1);
})();