作者:
SheueJi (雪姬)
2018-09-12 17:24:04請問版上的大神們:
for (var i = 0; i < 10; i++) {
function test() {
console.log(i);
}
test();
}
上面的程式跑下去,它會跑出 0,1,2,3...
但若是改成這樣就不會了:
for (var i = 0; i < 10; i++) {
setTimeout(function() {
console.log(i);
}, 0);
}
想請問這是為什麼呢?
setTimeout是不會馬上執行是嗎?
setTimeout跟其它的一般函式有什麼不一樣嗎?
另外我以為函式包在函式裡才是閉包
for(xxxxxx){} 這個for迴圈也是函式嗎?
新手入門,還請多多指點,感激感激~~
作者: gholk (正常正高) 2018-09-12 19:44:00
二個函數都是印出 i 的值,但 settimeout 是在一段時間後才執行。執行時 i 的值已經是 10 了。閉包是指函數宣告時會把外界的變數也包進來,會一層層往外settimeout 具體來說是到所有 statement 都結束後才會開始