Javascript中的闭包和范围

时间:2018-06-09 16:34:36

标签: javascript

您好。

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

这是来自&#34;你不知道JS&#34;的代码片段。系列。我知道如果有var而不是let,这将不会按预期工作(目的是以1秒的间隔写出j的每个后续值)。我知道要使它工作,timer函数需要对范围进行闭包,每个范围都包含j值集合中的值,例如:

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

}

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

0 个答案:

没有答案