Junior
Kādas sekas var radīt mainīgā deklarēšana, izmantojot var funkcijas iekšienē?
sobes.tech AI
Atbilde no AI
Mainīgo deklarēšana ar var funkcijas iekšienē ir funkcijas līmeņa redzamības. Tas nozīmē, ka tāds mainīgais ir pieejams visā funkcijā, ignorējot bloka līmeņa redzamību (piemēram, iekš if vai for).
Sekas:
- Mainīgo pārrakstīšana: Mainīgais, kas deklarēts ar
varblokā, var pārrakstīt tādu pašu nosaukumu iepriekš deklarētu mainīgo tajā pašā funkcijā, bet ārpus šī bloka. - Pacelšana (Hoisting): Mainīgā deklarācija ar
vartiek pacelta funkcijas sākumā. Tas nozīmē, ka var izmantot mainīgo pirms tās deklarēšanas, bet tās vērtība brīdī, kad to izmanto, būsundefined. - Negaidīta uzvedība ciklos:
forciklos ar asīnhroniskām operācijām (piemēram,setTimeout) mainīgais, kas deklarēts arvar, būs pēdējā cikla vērtība visiem asīnhroniskajiem atgriezeniskajiem saziņām, nevis vērtība tajā brīdī, kad notika iterācija.
Piemērs ar pacelšanu un pārrakstīšanu:
function exampleVarScope() {
console.log(a); // undefined (pateicoties hoisting)
var a = 10;
if (true) {
var a = 20; // Pārraksta ārējo mainīgo 'a'
console.log(a); // 20
}
console.log(a); // 20 (vērtība no `if` bloka)
}
exampleVarScope();
Piemērs ar ciklu un asīnhroniskām operācijām:
function varLoopExample() {
for (var i = 0; i < 3; i++) {
setTimeout(function() {
console.log(i); // Izvadīs 3, 3, 3 (i ir pēdējā vērtība no cikla)
}, 100);
}
}
varLoopExample();
Sakarā ar šīm īpatnībām, lai novērstu neparedzētas situācijas, ieteicams izmantot let vai const, kuriem ir bloka līmeņa redzamība.