这块代码为什么都是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
阅读 1.9k
4 个回答

变量ivar命令声明的,在全局范围内都有效,所以全局只有一个变量i。每一次循环,变量i的值都会发生改变,而循环内被赋给数组arr的函数内部的console.log(i),里面的i指向的就是全局的i。也就是说,所有数组arr的成员里面的i,指向的都是同一个i,导致运行时输出的是最后一轮的i的值,也就是 10。

https://es6.ruanyifeng.com/#docs/let

var是函数级作用域,for里的每次循环中的i是同一个变量,三个函数调用的时候i已经是3了。

可以查一查varlet的区别, 你就知道为什么了, 和var的作用域相关, 这就是为什么不鼓励使用var而是使用let的原因

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题