Středník pro bezpečnost v IIFE
Nechť je naše funkce volaná na místě nyní nezačíná plusem, ale je obalena kulatými závorkami, takto:
(function() {
console.log(1); // vypíše 1
})();
Nechť je proměnná num definována vně
funkce:
let num = 1; // středník je přítomen
(function() {
console.log(num); // vypíše 1
})();
Nyní předpokládejme, že jsme zapomněli napsat středník:
let num = 1
(function() {
console.log(num); //!! vyhodí chybu
})();
Ukazuje se, že takový kód vyhodí chybu, protože JavaScript vnímá naši funkci jako pokračování příkazu z prvního řádku.
Abychom se takovým problémům vyhnuli, je před voláním funkce na místě vždy nutné napsat středník, takto:
let num = 1
;(function() {
console.log(num); // vypíše 1
})();
Může se zdát, že je problém poněkud umělý. Ve skutečnosti tomu tak není. Může nastat situace, kdy na své stránce připojujete několik skriptů z oddělených souborů. V tomto případě může být na konci jednoho souboru vynechán středník a to automaticky povede k problému, pokud druhý soubor začíná voláním funkce na místě.
Proto vždy-vždy uvádějte středník před voláním funkce na místě, i když jste v danou chvíli přesvědčeni, že problémy nebudou. Mohou vzniknout později.
Aplikujme výše řečené a zavolejme funkci na místě, přičemž na začátek vložíme středník:
;(function() {
console.log(1); // vypíše 1
})();
Určete, bez spuštění kódu, co se vypíše do konzole:
let str = 'str';
(function() {
console.log(1);
})();
Určete, bez spuštění kódu, co se vypíše do konzole:
let str = 'str'
(function() {
console.log(1);
})();