Ponto e vírgula para segurança em IIFE

Suponha que nossa função imediatamente invocada não comece com um sinal de mais, mas seja envolta por parênteses, assim:

javascript(function() {
  console.log(1); // exibirá 1
})();

Suponha que a variável num seja definida fora da função:

javascriptlet num = 1; // ponto e vírgula está presente

(function() {
  console.log(num); // exibirá 1
})();

Agora, suponha que nos esquecemos de colocar o ponto e vírgula:

javascriptlet num = 1

(function() {
  console.log(num); //!! lançará um erro
})();

Isso significa que esse código lançará um erro, pois o JavaScript interpreta nossa função como uma continuação do comando da primeira linha.

Para evitar tais problemas, é sempre necessário colocar um ponto e vírgula antes da invocação da função imediata, assim:

javascriptlet num = 1

;(function() {
  console.log(num); // exibirá 1
})();

Pode parecer que o problema é um pouco artificial. Na verdade, não é. Pode acontecer uma situação em que você tem vários scripts incluídos em arquivos separados em sua página. Neste caso, o ponto e vírgula pode estar omitido no final de um arquivo e isso automaticamente levará a um problema se o segundo arquivo começar com uma invocação de função imediata.

Portanto, sempre, sempre coloque um ponto e vírgula antes de invocar uma função imediata, mesmo que você tenha certeza de que não haverá problemas no momento. Eles podem surgir posteriormente.

Vamos aplicar o que foi dito acima e invocar a função imediata, colocando um ponto e vírgula no início:

javascript;(function() {
  console.log(1); // exibirá 1
})();
Задание 1

Determine, sem executar o código, o que será exibido no console:

javascriptlet str = 'str';

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

Determine, sem executar o código, o que será exibido no console:

javascriptlet str = 'str'

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