Semikolon för säkerhet i IIFE
Låt oss nu anta att vår omedelbart exekverade funktion inte börjar med ett plus, utan är innesluten i runda parenteser, så här:
(function() {
console.log(1); // skriver ut 1
})();
Låt variabeln num definieras utanför
funktionen:
let num = 1; // semikolon finns
(function() {
console.log(num); // skriver ut 1
})();
Låt oss nu anta att vi glömde att sätta semikolon:
let num = 1
(function() {
console.log(num); //!! ger ett fel
})();
Det visar sig att denna kod kommer att ge ett fel, eftersom JavaScript uppfattar vår funktion som en fortsättning på kommandot från den första raden.
För att undvika sådana problem måste man alltid sätta ett semikolon före anropet av en omedelbart exekverad funktion, så här:
let num = 1
;(function() {
console.log(num); // skriver ut 1
})();
Det kan verka som att problemet är något konstlat. Det är det faktiskt inte. Det kan uppstå en situation där du har flera skript på din sida som läses in från separata filer. I sådana fall kan semikolon utelämnas i slutet av en fil och det kommer automatiskt att leda till problem om den andra filen börjar med ett anrop av en omedelbart exekverad funktion.
Därför bör du alltid, alltid sätta ett semikolon före anropet av en omedelbart exekverad funktion, även om du för tillfället är säker på att det inte kommer att uppstå problem. De kan dyka upp senare.
Låt oss tillämpa ovanstående och anropa en funktion omedelbart, med ett semikolon i början:
;(function() {
console.log(1); // skriver ut 1
})();
Avgör, utan att köra koden, vad som kommer att skrivas ut i konsolen:
let str = 'str';
(function() {
console.log(1);
})();
Avgör, utan att köra koden, vad som kommer att skrivas ut i konsolen:
let str = 'str'
(function() {
console.log(1);
})();