khellang/iffe.md

Se você não se importa com o valor de retorno do IIFE, pode ser qualquer um dos seguintes:

!function(){}(); // => true~function(){}(); // => -1+function(){}(); // => NaN-function(){}(); // => NaN

Vamos explorar isso um pouco mais.

Todo o trabalho é o mesmo. Começa a ficar interessante quando um dos módulos está faltando um ponto-e-vírgula:

Com um ponto-e-vírgula faltando, cada conjunto de parênteses está tentando imediatamente evocar a expressão anterior. Esse seria o valor de retorno do IIFE.

Então a diferença é quando o TypeError acontece. Vamos ver o que os argumentos estão a fazer. Note que console.log() retorna indefinido:

Agora vamos fazer o mesmo exemplo com o caminho crockford:

Mas espere, não há TypeError aqui…

Não há TypeError por causa da função retornada. A função retornada que registra os argumentos é então invocada com o valor de retorno do módulo2, que é indefinido. Com esse entendimento, vamos voltar ao exemplo original, onde havia um TypeError:

Conclusão

Os (function{})(); e (function(){}()); IIFEs podem agir de forma diferente na situação de ponto-e-vírgula ausente.

Utilizar linter ou uma ferramenta para ter certeza de que os módulos não estão faltando ponto-e-vírgula quando se trabalha com módulos.

Para ser extra seguro, adicione um ponto-e-vírgula principal ao IIFE:

Deixe uma resposta

O seu endereço de email não será publicado.