for (var i = 0; i < 10; i++) {
(function() {
var i = i;
console.log(i)
})();
}
var i //Создать переменную i (undefined) в данной области видимости
= i; //Затем присвоить ей значение переменной переменной i (которую только что создали - undefined)
берется извне переменная i и присваивается переменной iТам не так, имя "i" захватывается не в момент var, а с начала блока и до конца, тот же результат будет если var i переместить в конец:
for (var i = 0; i < 10; i++) {
(function() {
console.log(i);
var i;
})();
}
foo(); // вызов
function foo() {console.log('FOO') } // объявление