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