欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS面試之console的異步性怎么理解詳解

 更新時(shí)間:2022年10月24日 11:24:40   作者:青天訣  
這篇文章主要為大家介紹了JS面試之console的異步性怎么理解詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

面試題目(字節(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)文章

最新評(píng)論