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

相关推荐

龙珠传说:nb,公务员解约不需要支付违约金吧
点赞 评论 收藏
分享
湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
xdm怎么说&nbsp;要被拷打了&nbsp;担心是KPI
丹田:面就完了,就当日薪四位数的大佬免费给给你面试。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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