经典面试题(12):关于事件循环,以下代码将输出什么?
看下面的代碼,輸出的結(jié)果是什么?并解釋你的答案。
function printing() {console.log(1);
? ?setTimeout(function() {
console.log(2);
? ?}, 1000);
? ?setTimeout(function() {
console.log(3);
? ?}, 0);
? ?console.log(4);
}
printing();
答案:
14
3
2
想知道為什么輸出順序是這樣的,我們需要弄了解?setTimeout()?做了什么,以及瀏覽器的事件循環(huán)原理。
瀏覽器有一個(gè)事件循環(huán)用于檢查事件隊(duì)列,處理延遲的事件。UI事件(例如,點(diǎn)擊,滾動(dòng)等),Ajax回調(diào),以及提供給?setTimeout()?和?setInterval()?的回調(diào)都會(huì)依次被事件循環(huán)處理。
因此,當(dāng)調(diào)用?setTimeout()?函數(shù)時(shí),即使延遲的時(shí)間被設(shè)置為0,提供的回調(diào)也會(huì)被排隊(duì)。回調(diào)會(huì)乖乖地待在隊(duì)列中,直到指定的時(shí)間用完后,它才開始執(zhí)行動(dòng)作。
因此,即使?setTimeout()?回調(diào)被延遲0毫秒,它仍然會(huì)被排隊(duì),并且直到函數(shù)中其他非延遲的語句被執(zhí)行完了之后,才會(huì)執(zhí)行。所以運(yùn)行的結(jié)果是:1 4 3 2。
熱門文章
原創(chuàng)教程原創(chuàng)教程:
附加習(xí)題:
職場焦慮:
感到迷茫:
培訓(xùn)出身:
培訓(xùn)費(fèi)用:
搞笑黑話:
職業(yè)自由:
職場形象:
總結(jié)
以上是生活随笔為你收集整理的经典面试题(12):关于事件循环,以下代码将输出什么?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云炬随笔20211205(2)
- 下一篇: 设计师听了想打人