Funções IIFE (Funções Auto Executáveis) - JavaScript
Normalmente, a definição de uma função é separada da sua chamada: primeiro definimos a função, depois a chamamos. No entanto, isso não é obrigatório. Também podemos criar funções que são chamadas imediatamente após serem definidas. Essas funções são conhecidas como Immediately Invoked Function Expressions (IIFE). Elas são envolvidas por parênteses, e logo após a definição, há uma chamada com ou sem parâmetros:
// função IIFE
(function() {
console.log("Olá, mundo!");
}());
Aqui, podemos dividir este programa em algumas partes. Primeiro, a definição de uma função anônima:
function() {
console.log("Olá, mundo!");
}
Esta é uma função comum que imprime uma string. Em seguida, há uma chamada de função com parênteses vazios:
function() {
console.log("Olá, mundo!");
}()
Esses parênteses representam a chamada da função, onde normalmente seriam passados parâmetros. Como nossa função anônima não tem parâmetros, os parênteses estão vazios. Assim, a função é chamada imediatamente após sua definição, e toda a construção é envolvida por parênteses.
Podemos criar e chamar uma função que aceita parâmetros da mesma maneira:
(function(a, b) {
const resultado = a + b;
console.log(`${a} + ${b} = ${resultado}`);
}(4, 5));
Aqui, a função aceita dois parâmetros, cujos valores são somados e o resultado é impresso no console. E após a definição da função, passamos imediatamente dois números - 4 e 5. Dessa forma, a função é definida e executada imediatamente, somando os números 4 e 5.
Estilo Funcional
Closures e funções IIFE simplificam a escrita de programas no estilo funcional. Vejamos o exemplo a seguir:
const sum = (function() {
const a = 4;
const b = 5;
return a + b;
}());
console.log(sum); // 9
Aqui, temos uma função IIFE que retorna a soma de dois números. A função é chamada e o resultado é armazenado na variável sum
sum
Funções IIFE são úteis para criar escopos isolados, onde variáveis locais são definidas e não poluem o escopo global. Além disso, elas são úteis para criar funções que são chamadas apenas uma vez, como inicializadores de variáveis ou configurações de bibliotecas.
No entanto, é importante notar que funções IIFE não são necessárias em JavaScript moderno. Com a introdução de let
const