js循环体中let和var的区别

 最近遇到一个问题,一直搞不懂,希望有人给我详细解答,让我理解透彻。首先放两段代码,它们的结果不同。想知道为何不同。

let funcs = [];
for(var i = 0; i < 10; i++){
    funcs.push(() => {
        console.log(i);
    })
}

funcs.forEach((func) => {
    func();    //结果为 9 9 9 9 9 9 9 9 9
})

//我是分割线...................

let funcs = [];
for(let i = 0; i < 10; i++){
    funcs.push(() => {
        console.log(i);
    })
}

funcs.forEach((func) => {   func();    //结果为 0 1 2 3 4 5 6 7 8 9
})


全部评论
let有块级作用域,也就是说每一次循环里面(let i) i都是不同的,所以输出1,2,3,4,5,6,7,8,9 var你应该理解吧,没有块级作用域,引用的值始终是一个,所以输出9999999
点赞 回复 分享
发布于 2017-07-31 16:44
看下阮一峰老师的博客http://es6.ruanyifeng.com/#docs/let
点赞 回复 分享
发布于 2017-07-31 16:44
闭包呗
点赞 回复 分享
发布于 2017-08-01 00:20
在每次迭代中 let会创建一个新的同名变量并对其进行初始化, 在调用的时候 生成了一个闭包
点赞 回复 分享
发布于 2017-08-14 18:04

相关推荐

dongsheng66:如果想进大厂的话,在校经历没必要占这么大篇幅,可以把专业技能单独放一个专栏写,可以加个项目经历
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务