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:
(function() {
console.log(1); // exibirá 1
})();
Suponha que a variável num seja definida fora
da função:
let 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:
let 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:
let 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:
;(function() {
console.log(1); // exibirá 1
})();
Determine, sem executar o código, o que será exibido no console:
let str = 'str';
(function() {
console.log(1);
})();
Determine, sem executar o código, o que será exibido no console:
let str = 'str'
(function() {
console.log(1);
})();