This question already has answers here:
JavaScript closure inside loops – simple practical example
(44个回答)
2年前关闭。
我期望看到的是12345,但结果是55555
让我在下面用'//'解释我的逻辑
我已经读过这篇文章
JavaScript closure inside loops – simple practical example,
但还是不明白
(44个回答)
2年前关闭。
var arr = []
for(var i=0; i<5; i++){
arr[i] = function(){
return i;
}
}
for(var index in arr){
document.write(arr[index]())};
我期望看到的是12345,但结果是55555
让我在下面用'//'解释我的逻辑
var arr = [] // creating array new object
for(var i=0; i<5; i++){
arr[i] = function(){
return i;
}
// arr = [function(){return 0}, function(){return 1}, function(){return 2}, function(){return 3}, function(){return 4}
}
for(var index in arr){
document.write(arr[index]())};
// outcome is 12345
我已经读过这篇文章
JavaScript closure inside loops – simple practical example,
但还是不明白
最佳答案
这是因为在您的for循环中,var i
并非块作用域。这意味着,您可以在循环外部访问i
。因此,在返回i的循环内创建函数并在外部执行这些函数后,它将具有i = 5
,因为这是您分配给i
的最后一个值。您需要使用let
而不是var
来具有要在循环中使用的块范围变量。
07-25 23:13