I don’t understand why the function “printNumTwo” returns 2, instead of 0 or undefined. Since i is only in the scope of the for, when the function is called the for has ended, so there wouldn’t be a variable i anymore.
let printNumTwo;
for (let i = 0; i < 3; i++) {
if (i === 2) {
printNumTwo = function() {
return i;
};
}
}
console.log(printNumTwo());
console.log(i);
It’s all about what JS calls “closures”. At the time the printNumTwo
function is created the value of i
is 2. Because you used let
to declare i
in the for
loop then the printNumTwo
function will remember that the value of i
is 2 and that’s what it will return whenever you call it.
If you had used var
instead to declare i
in the for
loop then printNumTwo
would return 3 because that is the last value for i
when the for
loop stops.
Also, your last console log is an error because the variable i
doesn’t exist outside of the for
loop since you declared it with let
.
2 Likes