首页 > 解决方案 > Javascript 中的闭包和作用域

问题描述

你好。

 for (var i=1; i<=5; i++) {
        let j = i; // yay, block-scope for closure!
        setTimeout( function timer(){
            console.log( j );
        }, j*1000 );
    }

这是“你不懂 JS”系列的一段代码。我知道如果有 avar而不是let. 我知道要使其正常工作,该timer函数需要对作用域进行闭包,每个作用域都包含 的值集中的一个值j,例如:

for (var i=1; i<=5; i++) {
(function(j){
    setTimeout( function timer(){
        console.log( j );
    }, j*1000 );
})( i );

}

这对我来说很有意义,因为循环的每次迭代都会创建新的范围。所以我的问题是:let在循环中声明的变量是否为每次迭代创建一个新的范围。谢谢。

标签: javascript

解决方案


推荐阅读