您好。
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
声明的变量是否为每次迭代创建了一个新的范围。感谢。