iT邦幫忙

0

setTimeout問題

gameking93 6 月前2962 瀏覽

setTimeout(console.log('123'),0)

想請問上面用的setTimeout方法0秒後印出123

跟我直接console.log('123')差別在哪裡?

是不是要先去了解event loop才能懂差別

event loop有點複雜 還不是很清楚處理程序

看更多先前的討論...收起先前的討論...
weiclin iT邦高手 7 級 ‧ 6 月前 檢舉
底下三行放一起跑一次就知道了
console.log('123')
setTimeout(()=>console.log('456'), 0)
console.log('789')
fillano iT邦超人 1 級 ‧ 6 月前 檢舉
樓主的例子:
setTimeout(console.log('123'),0)

執行的過程是:
1. 執行console.log('123'),把執行的結果當做setTimeout的第一個參數。由於console.log()不會return,所以傳給setTimeout的是undefined
2. 執行setTimeout(),使用1的結果作為第一個參數,使用0作為第二個參數

你的例子中,並沒有任何東西給setTimeout執行,所以跟event loop一點關係都沒有。
fillano iT邦超人 1 級 ‧ 6 月前 檢舉
如果要了解這個主題,可以從古老的文章開始,例如John E. Resig 2008年的文章:
http://ejohn.org/blog/how-javascript-timers-work/
gameking93 iT邦新手 5 級 ‧ 6 月前 檢舉
@fillano 了解 謝謝提供意見~~~
balduran iT邦新手 5 級 ‧ 6 月前 檢舉
我想樓主想要問的應該是

setTimeout(function(){console.log('123')},0) 和 直接執行 console.log('123') 的差別
gameking93 iT邦新手 5 級 ‧ 6 月前 檢舉
對~~

尚未有邦友回答

立即登入回答