2019-02-21

JavaScript 在 for 迴圈內使用 let

for(let i=0; i<10; i++){
setTimeout(function(){
console.log(i);
}, 100*i);
}
雖然只用了一個 let ,但實際上卻是依據迴圈的執行次數,宣告了 10 個區域變數。每個匿名函式所在的區域,都有一個 i 。

下面的例子可以說明這種情況:
let funcs = [];
for(let i=0; i<10; i++){
funcs.unshift(function(){
return i;
});
}
for(let s in funcs){
console.log( funcs[s]() );
}

但這個例子,由於函式不位於變數的區域內,因此會造成問題。
const f = ()=>{
console.log(i);
}
for(let i=0; i<10; i++){
setTimeout(f, 100*i);
}

沒有留言:

FB 留言