setTimeout回調函數為立即執行函數的情況


for (var i = 0; i < 5; i++) {
  setTimeout((function(i) {
    console.log(i);
  })(i), i * 1000);
}
setTimeout()的回調函數是一個立即執行函數
改代碼的運行結果是:立即打印出0,1,2,3,4,5
為什么會立刻打印出i的值呢?
從字面意思理解:立即函數就是立即執行無需等待回調,代碼加載就立即執行

試着給立即執行函數return一個function,setTimeout函數執行的就是這個function
for (var i = 0; i < 5; i++) {
  setTimeout((function(i) {
    console.log(i);
    return function() {
        console.log('回調')
        console.log(i)
    }
  })(i), i * 1000);
}

運行結果:先執行完立即執行函數,然后再執行function函數,每個i*1000秒就答應出 console.log('回調')和console.log(i)

總結:setTimeout的第一個參數必須是需要編譯的代碼或者是一個函數方法,而如果直接傳入一行可執行代碼,那么抱歉,這里會立即執行,沒有延遲效果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM