Toчка с запятой для безопасности в IIFE

Пусть теперь наша вызывающаяся на месте функция будет не с плюсом в начале, а обернута круглыми скобками, вот так:

javascript(function() {
  console.log(1); // выведет 1
})();

Пусть переменная num задается снаружи функции:

javascriptlet num = 1; // точка с запятой стоит

(function() {
  console.log(num); // выведет 1
})();

Пусть теперь мы забыли поставить точку с запятой:

javascriptlet num = 1

(function() {
  console.log(num); //!! выдаст ошибку
})();

Получается, что такой код выдаст ошибку, так как JavaScript воспринимает нашу функцию как продолжение команды первой строки.

Чтобы избежать таких проблем, перед вызовом функции на месте всегда необходимо ставить точку с запятой, вот так:

javascriptlet num = 1

;(function() {
  console.log(num); // выведет 1
})();

Кажется, что проблема несколько надуманна. На самом деле, это не так. Может быть такая ситуация, что у вас на странице подключаются несколько скриптов из отдельных файлов. В этом случае в конце одного файла может быть опущена точка с запятой и это автоматически приведет к проблеме, если второй файл начинается с вызова функции на месте.

Поэтому, всегда-всегда ставьте точку с запятой перед вызовом функции на месте, даже если вы на данный момент уверены, что проблем не будет. Они могут возникнуть потом.

Применим сказанное выше и вызовем функцию на месте, поставив в начале точку с запятой:

javascript;(function() {
  console.log(1); // выведет 1
})();
Задание 1

Определите, не запуская код, что выведется в консоль:

javascriptlet str = 'str';

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

Определите, не запуская код, что выведется в консоль:

javascriptlet str = 'str'

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