異步JS -- 異步控制檯解惑

在使用console的時候有時候會有這樣的疑惑:
使用console打印出的結果和使用debugger看到的結果並不一樣?!
What a f*ck?
今天,原因終於找到~

因爲,(劃重點):
並沒有什麼規範或者一組需求指定console.*方法簇如何工作——它們並不是JS正式的一部分,而是由宿主環境添加到JS中的。因此,不同的瀏覽器和JS環境可以按照自己的意願來實現,這樣有時候就會引起混淆。

尤其要指出的是!
在某些條件下,某些瀏覽器的console並不會吧傳入的結果立即輸出!因爲在很多程序中——不只是在JS中,I/O是非常低速的阻塞部分!所以瀏覽器在後臺異步處理I/O是能夠提高性能的!

這就是爲什麼我們在控制檯打印的結果和單步調試看到的結果可能會不同。因爲console可能是異步操作。

因此,我們應該儘量使用debugger而少依賴console輸出,次優的方案則是把對象序列化到一個字符串中:比如使用JSON.stringify()方法。

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