Junior
A que consequências pode levar a declaração de uma variável usando var dentro de uma função?
sobes.tech IA
Resposta da IA
A declaração de uma variável com var dentro de uma função tem um âmbito funcional. Isso significa que essa variável está disponível em toda a função, ignorando os escopos de bloco (por exemplo, dentro de if ou for).
Consequências:
- Sobrescrever variáveis: Uma variável declarada com
varnum bloco pode sobrescrever uma variável com o mesmo nome declarada anteriormente na mesma função, mas fora desse bloco. - Elevação (Hoisting): A declaração de uma variável com
varé elevada ao início da função. Isso significa que pode usar a variável antes de sua declaração, mas seu valor nesse momento seráundefined. - Comportamento inesperado em ciclos: Em ciclos
forcom operações assíncronas (por exemplo,setTimeout), a variável declarada comvarterá o último valor do ciclo para todos os callbacks assíncronos, não o valor no momento da iteração.
Exemplo de elevação e sobrescrita:
function exemploEscopoVar() {
console.log(a); // undefined (por causa do hoisting)
var a = 10;
if (true) {
var a = 20; // Sobrescreve a variável externa 'a'
console.log(a); // 20
}
console.log(a); // 20 (valor do bloco if)
}
exemploEscopoVar();
Exemplo com ciclo e operações assíncronas:
function exemploCicloVar() {
for (var i = 0; i < 3; i++) {
setTimeout(function() {
console.log(i); // Vai imprimir 3, 3, 3 (i tem o último valor do ciclo)
}, 100);
}
}
exemploCicloVar();
Devido a essas características, para evitar situações imprevistas, recomenda-se usar let ou const, que têm escopo de bloco.