I run the two following code snippets.
The first loop is giving the expected result when I assign a different name for the local variable.
for(var i = 0; i < 3; i++) {
    setTimeout((function() {
     var i2 = i;//named i2 here
        return function(){console.log(i2)};
    })(), 10);
}The second loop will print undefined instead. I thought var i = i will just re-declare the original i. And I expect it pint out some number. How come I get undefined here?
for(var i = 0; i < 3; i++) {
    setTimeout((function() {
     var i = i;
        console.log(i);
        return function(){console.log(i)};
    })(), 10);
} 
     
     
     
    