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
的第一個參數必須是需要編譯的代碼或者是一個函數方法,而如果直接傳入一行可執行代碼,那么抱歉,這里會立即執行,沒有延遲效果