Tell us what’s happening:
I don’t understand why this returns 3. The exercise explains but I still cannot figure it out.
Where is declared the function named printNumTwo() ?
I dont see a declaration like: “function printNumTwo(){
}” - I see a var declaration named printNumTwo, not a function.
i starts on 0. So, the if compares with 2: not the same, then it doesn’t gets into the “if” statement. Then i is 1, again, not equals to 2, doesn’t gets into the “if” statement. But when it worths 2, the “if” compares and it is equal, so it gets into the “if” statement and makes the printNumTwo var equals to “function()”. THIS IS THE PART I DON’T UNDERSTAND. What is “function()”? Where does it comes from? Why you didn’t explain this before? Why without a name? To which function is pointing?
Your code so far
var printNumTwo;
for (var i = 0; i < 3; i++) {
if (i === 2) {
printNumTwo = function() {
return i;
};
}
}
console.log(printNumTwo());
// returns 3
As you can see, printNumTwo()
prints 3 and not 2. This is because the value assigned to i
was updated and the printNumTwo()
returns the global i
and not the value i
had when the function was created in the for loop.
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36
.
Challenge: Compare Scopes of the var and let Keywords
Link to the challenge: