У меня есть два блока кода, который я считаю, должен производить тот же результат:Javascript переменной копия сфера
1.
for(var i=0;i<10;i+=1){
var j=i;
setTimeout(function(){
console.log(j);
},100);
}
2.
for(var i=0;i<10;i+=1){
(function(j){
setTimeout(function(){
console.log(j);
},100);
})(i);
}
Однако, как и большинство из вас можно ожидать, что первый журнал будет 9 десять раз, а второй - правильно от 0 до 9.
Второй использует замыкание для сохранения значения i. Я думаю, что первый должен сохранить значение, потому что:
var j
создать новую переменную j на каждой итерации.- текущее значение
i
присваивается этому новомуj
на итерации. - этот новый
j
затем привязан к функцииsetTimeout
в той же итерации. - следующая итерация свяжет новый j с функцией в этой итерации.
Но оказывается, что j
привязан к последнему значению i
для всей итерации.
Итак, в чем разница между созданием переменной с использованием аргумента функции и var
?
Пожалуйста, укажите любую ошибку! Заранее спасибо !
Спасибо всем! Я не знал, что javascript имеет только функцию и глобальную область действия! Обвините других языков, которые научили меня делать это: P
«var j» создает новую переменную j на каждой итерации »нет, это не так. – zzzzBov