iT邦幫忙

0

setTimeout問題

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

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

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

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

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

看更多先前的討論...收起先前的討論...
weiclin iT邦高手 4 級 ‧ 2017-01-23 13:14:47 檢舉
底下三行放一起跑一次就知道了
console.log('123')
setTimeout(()=>console.log('456'), 0)
console.log('789')
fillano iT邦超人 1 級 ‧ 2017-01-23 14:20:59 檢舉
樓主的例子:
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 級 ‧ 2017-01-23 17:56:55 檢舉
如果要了解這個主題,可以從古老的文章開始,例如John E. Resig 2008年的文章:
http://ejohn.org/blog/how-javascript-timers-work/
@fillano 了解 謝謝提供意見~~~
balduran iT邦新手 5 級 ‧ 2017-02-17 12:14:00 檢舉
我想樓主想要問的應該是

setTimeout(function(){console.log('123')},0) 和 直接執行 console.log('123') 的差別
對~~
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友回答

立即登入回答