var printNumTwo;
for (var i = 0; i < 3; i++) {
if (i === 2) {
printNumTwo = function() {
return i;
};
}
}
console.log(printNumTwo());
Why the printed value of i is 3 instead of 2?
Because of var
keyword, when you use var
keyword for loop, It replace value instead of create a new value, where i
created once and replaced by i
on each iteration... you should use let
or const
to expect your desire output.
example:
using let
keyword
for (let i = 0; i < 3; i++) {
setTimeout(() => console.log(i), i * 100)
}
Here we used var
keyword
for (var i = 0; i < 3; i++) {
setTimeout(() => console.log(i), i * 100)
}
In Another word, In JavaScript using var
keyword to declare a variable create a variable in function or closure scope, instead of block scope.