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
})


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

相关推荐

06-20 17:42
东华大学 Java
凉风落木楚山秋:要是在2015,你这简历还可以月入十万,可惜现在是2025,已经跟不上版本了
我的简历长这样
点赞 评论 收藏
分享
06-10 18:55
已编辑
西安电子科技大学 Java
只管努力就好:恭喜恭喜恭喜,我都没有面试机会,上周被压力炸了,今天中午看页面显示被捞进入评估结果下午就没了
京东三面373人在聊
点赞 评论 收藏
分享
07-25 13:42
门头沟学院 Java
安锋:看看老板的腿
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务