JS面試之console的異步性怎么理解詳解
面試題目(字節(jié)):
console的異步性怎么理解?
答案解析:
console
我一直以為是同步執(zhí)行的,直到在一本書上看到,才了解到console本身有異步的特性。雖然在平常開發(fā)中經(jīng)常使用console
,但是真的沒有意識到它的異步性。
下面就看下異步的實(shí)例
基礎(chǔ)類型
該類型是我們開發(fā)中經(jīng)常使用的,正是這種打印結(jié)果,讓我們認(rèn)為console
是同步的。其實(shí)這種case也是異步的,因?yàn)閳?zhí)行到console
時,拍攝了快照,記錄了當(dāng)時的變量值,當(dāng)代碼執(zhí)行完返回到事件隊列時,直接打印了前面記錄的快照造成的。
let foo = 'bar'; console.log(foo); foo = 'test';
引用類型
引用類型,可以幫我們很好的驗(yàn)證console
的異步性。看下圖中的打印結(jié)果,如果是同步的話,打印結(jié)果應(yīng)該時{}
,但是卻是修改后的值{foo: 'bar'}
。
主要是因?yàn)?,obj是引用類型,執(zhí)行到console
時,只是存儲了對象的引用,對于對象內(nèi)部的值未做記錄。當(dāng)代碼執(zhí)行完后,obj內(nèi)部的值已經(jīng)被修改。返回事件隊列后,打印出的結(jié)果實(shí)際是修改后的值。
let obj = {}; console.log(obj); obj.foo = 'bar';
結(jié)論
以上示例,都是在瀏覽器中的表現(xiàn),也就是瀏覽器中console
實(shí)際是異步快照,node中的console
是另一回事,它是嚴(yán)格同步的,因此同樣的代碼打印結(jié)果是{}
。
瀏覽器之所以這樣,是因?yàn)?,在許多程序中,I/O被認(rèn)為是低速的阻塞環(huán)節(jié)。在瀏覽器中,console.log會被異步處理以提高性能。
下面再看兩道題目加深下理解
第一道
a = [1, 2, 3]; console.log(a, a.pop());
[1, 2], 3
第二道
這道題目很有特點(diǎn),打印結(jié)果,展開前后值是不一樣的。
person = { name: "張三", age: 18, }; console.log(person); person.name = "李四"; console.log(person);
當(dāng)console.log
輸出內(nèi)容為對象,指向的是對象的地址,當(dāng)點(diǎn)開對象進(jìn)行查看時,才會去訪問相應(yīng)地址獲取內(nèi)容。所以點(diǎn)開對象后,會重新訪問對象地址進(jìn)行查詢,因此之前的張三,變成了李四
以上就是JS面試之console的異步性怎么理解詳解的詳細(xì)內(nèi)容,更多關(guān)于JS面試console異步性的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
js關(guān)閉模態(tài)窗口刷新父頁面或跳轉(zhuǎn)頁面
點(diǎn)擊按鈕時,彈出B窗口(模態(tài))。在B窗口中添加數(shù)據(jù),提交后,要求B窗口自關(guān)閉,然后刷新A窗口(父),需要的朋友可以了解下2012-12-12JavaScript遍歷Json串瀏覽器輸出的結(jié)果不統(tǒng)一問題
json串屬于javascript的一個對象,有鍵和值對應(yīng)的對象。這篇文章主要介紹了JavaScript遍歷Json串瀏覽器輸出的結(jié)果不統(tǒng)一問題的相關(guān)資料,需要的朋友可以參考下2016-11-11ionic App問題總結(jié)系列之ionic點(diǎn)擊系統(tǒng)返回鍵退出App
本篇文章主要介紹了ionic App問題總結(jié)系列之ionic點(diǎn)擊系統(tǒng)返回鍵退出App,具有一定的參考價值,有興趣的可以了解一下2017-08-08基于rollup的組件庫打包體積優(yōu)化小結(jié)
這篇文章主要介紹了基于rollup的組件庫打包體積優(yōu)化小結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06Js模塊打包exports require import的用法和區(qū)別
這篇文章主要介紹了Js模塊打包exports require import的用法和區(qū)別,對模塊打包感興趣的同學(xué),可以參考下2021-05-05javascript執(zhí)行環(huán)境及作用域詳解
這篇文章主要為大家詳細(xì)介紹了javascript執(zhí)行環(huán)境及作用域,分別針對javascript執(zhí)行環(huán)境及作用域進(jìn)行探討,感興趣的小伙伴們可以參考一下2016-05-05