關於 JS setTimeout 立即調用,沒有延遲效果的解決辦法?

今天在學習的時候遇到了 setTimeout 立即調用的問題,很費解,於是就研究了一下。

這是我原來的代碼:

function getAge(value) {
  console.log(value)
}
setTimeout(getAge(18), 2000)

後來發現 setTimeout 的第一個參數必須是需要編譯的代碼或者是一個函數方法,而如果直接傳入一行可執行代碼,那麼抱歉,這裏會立即執行,沒有延遲效果。

解決辦法如下:

(1)讓第一個參數成爲函數

setTimeout(function () {
  getAge(18)
}, 2000)

(2)使用附加參數(一旦定時器到期,它們會作爲參數傳遞給 function

setTimeout(getAge, 2000, 18)

思考:

有人可能會疑惑,我之前那個 getAge(18) 不是也是函數嗎?

其實是這樣的:一個函數名後跟一個 ( ) ,表明立即調用函數,所以 setTimeout 就沒有延遲效果了。


論證:

setTimeout(
  (function () {
    getAge(18)
  })(),
  2000
)

該 setTimeout 也會立即輸出,在控制檯打印 18

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章