for循环中setTimeout,var与let的不同

先看下面两段代码

        for (let i = 0; i < 5; i++) {
            setTimeout(function () {
                console.log(i)
            }, 2000)
        }

        for (var i = 0; i < 5; i++) {
            setTimeout(function () {
                console.log(i)
            }, 2000)
        }

一个是输出0 1 2 3 4一个是输出5个5 为什么let的i,在setTimeout里的匿名函数,i取的还是块级作用域里的i?

一个假设是let的循环中,每次循环,js引擎让i都变成了一个新变量的原因导致的。

原文地址:https://www.cnblogs.com/zhansu/p/10308397.html