題目:改造代碼,打印0-9

for (var i = 0; i< 10; i++){
    setTimeout(() => {
        console.log(i);
    }, 1000)
}
// 10

原因:作用域,for循環中頭部使用var 定義變量i 時,它和循環體中的i 的作用域不是同級作用域,因此當for循環執行完畢後,並不會給每個循環都儲存相對應的i的值。

  1. 塊級作用域let
for (let i = 0; i< 10; i++){
    setTimeout(() => {
        console.log(i);
    }, 1000)
}
  1. IIFE
for (var i = 0; i< 10; i++){
    setTimeout((() => {
       console.log(i);
    })(), 1000)
}
  1. 傳參
    語法:setTimeout(function, milliseconds, param1, param2, …)
for (var i = 0; i< 10; i++){
    setTimeout((i) => {
       console.log(i);
    }, 1000, i)
}
for (var i = 0; i< 10; i++){
    setTimeout(function(i) {
       console.log(i);
    }.bind(null, i), 1000)
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章