账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    for循环中使用let,最后一次循环结束后i值为什么不进行一次自加
    • 2018-05-28 00:00
    • 10
    43
    0
    var testVar;
    for(var i=0;i<3;i++){
        testVar=function(){
        console.log(i)
        };
    }
    testVar(); // 结果为3
    let testVar;
    for(let i=0;i<3;i++){
        testVar=function(){
        console.log(i)
        };
    }
    testVar(); // 结果为2

    testVar中的闭包中保存了i的引用,而不是i当前的值,而i值在最后一次循环结束后执行了一次i++变成了3。
    但是let的for循环,最后一次循环,应该也是保存了i的引用,而这个i在最后一次循环结束后也应该执行一次i++,也应该变成3。但是输出为什么是2。
    由于对闭包的理解不同,而闭包不是这个问题的重点,所以我又换了个方式重新提问,如下------------------------
    testVar()返回的是这个函数被调用的时候的i值,用var的for循环,最后一次循环i值是2,由于被调用的时候循环已经结束,i值要进行一次i++,所以变成了3;
    而let的for循环,理论上来讲,也是这样的过程,最后也要进行i++,为什么还是2?

    1
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    更多回答
    网站公告
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部