Qual é a diferença entre usar variáveis declaradas com var e let no contexto de closures?
sobes.tech IA
Resposta da IA
A principal diferença reside na área de alcance que criam e, consequentemente, na forma como afetam o valor da variável capturada pelo encerramento.
As variáveis declaradas com var têm um âmbito funcional ou global. Num ciclo, por exemplo, o encerramento captura o último valor da variável var devido ao levantamento (hoisting).
// Exemplo com var
for (var i = 0; i < 3; i++) {
setTimeout(function() {
console.log(i); // Vai imprimir 3 três vezes
}, 100);
}
As variáveis declaradas com let têm um âmbito de bloco. Num ciclo, let cria uma nova variável para cada iteração, e o encerramento captura o valor da variável para essa iteração específica.
// Exemplo com let
for (let j = 0; j < 3; j++) {
setTimeout(function() {
console.log(j); // Vai imprimir 0, 1, 2
}, 100);
}
No contexto do encerramento, isto significa que um encerramento que captura a variável var referenciará o mesmo local na memória que contém o último valor da variável. Um encerramento que captura a variável let referenciará um local diferente na memória para cada iteração do ciclo.