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:

javascript(function() {
  console.log(1); // vypíše 1
})();

Nechť je proměnná num definována vně funkce:

javascriptlet 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:

javascriptlet 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:

javascriptlet 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:

javascript;(function() {
  console.log(1); // vypíše 1
})();
Задание 1

Určete, bez spuštění kódu, co se vypíše do konzole:

javascriptlet str = 'str';

(function() {
  console.log(1);
})();
Задание 2

Určete, bez spuštění kódu, co se vypíše do konzole:

javascriptlet str = 'str'

(function() {
  console.log(1);
})();