Punto e virgola per sicurezza in IIFE
Supponiamo ora che la nostra funzione immediatamente invocata non inizi con un segno più, ma sia racchiusa tra parentesi tonde, in questo modo:
(function() {
console.log(1); // stamperà 1
})();
Supponiamo che la variabile num sia definita all'esterno
della funzione:
let num = 1; // il punto e virgola è presente
(function() {
console.log(num); // stamperà 1
})();
Supponiamo ora di aver dimenticato di mettere il punto e virgola:
let num = 1
(function() {
console.log(num); //!! darà un errore
})();
Risulta che questo codice darà un errore, poiché JavaScript percepisce la nostra funzione come una continuazione del comando della prima riga.
Per evitare tali problemi, prima di chiamare una funzione immediata è sempre necessario mettere un punto e virgola, in questo modo:
let num = 1
;(function() {
console.log(num); // stamperà 1
})();
Potrebbe sembrare che il problema sia un po' artificioso. In realtà, non è così. Può succedere che sulla tua pagina vengano inclusi diversi script da file separati. In questo caso, alla fine di un file potrebbe essere omesso il punto e virgola e questo automaticamente causerà un problema se il secondo file inizia con una chiamata di funzione immediata.
Pertanto, metti sempre, sempre il punto e virgola prima di chiamare una funzione immediata, anche se in questo momento sei sicuro che non ci saranno problemi. Potrebbero sorgere in seguito.
Applichiamo quanto detto sopra e chiamiamo la funzione immediata, mettendo un punto e virgola all'inizio:
;(function() {
console.log(1); // stamperà 1
})();
Determina, senza eseguire il codice, cosa verrà stampato in console:
let str = 'str';
(function() {
console.log(1);
})();
Determina, senza eseguire il codice, cosa verrà stampato in console:
let str = 'str'
(function() {
console.log(1);
})();