之前知道...长时间不看忘记了,最近刷题刷到,查资料关键词也不知道怎么查...求上课
var arr = []
for(var i = 0 ;i<3;i++){
arr[i] = function(){
console.log(i)
}
}
arr[0]() //3
arr[1]() //3
arr[2]() //3
之前知道...长时间不看忘记了,最近刷题刷到,查资料关键词也不知道怎么查...求上课
var arr = []
for(var i = 0 ;i<3;i++){
arr[i] = function(){
console.log(i)
}
}
arr[0]() //3
arr[1]() //3
arr[2]() //3
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
变量
i
是var
命令声明的,在全局范围内都有效,所以全局只有一个变量i
。每一次循环,变量i
的值都会发生改变,而循环内被赋给数组arr
的函数内部的console.log(i)
,里面的i
指向的就是全局的i
。也就是说,所有数组arr
的成员里面的i
,指向的都是同一个i
,导致运行时输出的是最后一轮的i
的值,也就是 10。https://es6.ruanyifeng.com/#docs/let