Junior
Към какви последствия може да доведе обявяването на променлива с използване на var вътре в функция?
sobes.tech AI
Отговор от AI
Обявяването на променлива с var вътре във функция има функционална област на видимост. Това означава, че такава променлива е достъпна във цялата функция, игнорирайки блоковите области на видимост (например вътре в if или for).
Последици:
- Презаписване на променливи: Променлива, обявена с
varв блок, може да презапише променлива с същото име, обявена по-рано в същата функция, но извън този блок. - Hoisting (повдигане): Обявяването на променлива с
varсе повдига в началото на функцията. Това означава, че може да използвате променливата преди нейното обявяване, но стойността ѝ към този момент ще бъдеundefined. - Неочаквано поведение в цикли: В цикли
forс асинхронни операции (напримерsetTimeout), променливата, обявена сvar, ще има последната стойност от цикъла за всички асинхронни обратни повиквания, а не стойността към момента на итерацията.
Пример за повдигане и презаписване:
function primerVarScope() {
console.log(a); // undefined (заради hoisting)
var a = 10;
if (true) {
var a = 20; // Презаписва външната променлива 'a'
console.log(a); // 20
}
console.log(a); // 20 (стойността от блока if)
}
primerVarScope();
Пример с цикъл и асинхронни операции:
function primerCikълVar() {
for (var i = 0; i < 3; i++) {
setTimeout(function() {
console.log(i); // Ще изведе 3, 3, 3 (i има последната стойност от цикъла)
}, 100);
}
}
primerCikълVar();
Поради тези особености, се препоръчва използването на let или const, които имат блокова област на видимост.