九九热线视频精品99-动漫高h纯肉无码视频在线观看-午夜理论无码片在线观看免费-99精品国产在热久久无码-亚洲国产成人乱码

setTimeout() 引發(fā)的新認(rèn)識(shí)

2020/11/12 12:01:29   閱讀:3990    發(fā)布者:3990
setTimeout() 方法用于在指定的毫秒數(shù)后調(diào)用函數(shù)或計(jì)算表達(dá)式。

看到這樣一個(gè)說明,我們明白了它就是一個(gè)定時(shí)器,我們?cè)O(shè)定的函數(shù)就是一個(gè)"鬧鐘",時(shí)間到了它就會(huì)去執(zhí)行


<script>
        alert(1); 
        setTimeout("alert(2)", 0); 
        alert(3); 

    </script>


如果settimeout(0)會(huì)立即執(zhí)行,那么這里的執(zhí)行結(jié)果就應(yīng)該是1->2>3  . 然而實(shí)際的結(jié)果卻是1->3->2. 這說明了settimeout(0)并不是立即執(zhí)行


引擎單線程執(zhí)行的,它是基于事件驅(qū)動(dòng)的語言.它的執(zhí)行順序是遵循一個(gè)叫做事件隊(duì)列的機(jī)制.從圖中我們可以看出,瀏覽器有各種各樣的線程,比如事件觸發(fā)器,網(wǎng)絡(luò)請(qǐng)求,定時(shí)器等等.線程的聯(lián)系都是基于事件的.js引擎處理到與其他線程相關(guān)的代碼,就會(huì)分發(fā)給其他線程,他們處理完之后,需要js引擎計(jì)算時(shí)就是在事件隊(duì)列里面添加一個(gè)任務(wù). 這個(gè)過程中,js并不會(huì)阻塞代碼等待其他線程執(zhí)行完畢,而且其他線程執(zhí)行完畢后添加事件任務(wù)告訴js引擎執(zhí)行相關(guān)操作.這就是js的異步編程模型.

如此我們?cè)倩剡^頭來看settimeout(0)就會(huì)恍然大悟.js代碼執(zhí)行到這里時(shí),會(huì)開啟一個(gè)定時(shí)器線程,然后繼續(xù)執(zhí)行下面的代碼.該線程會(huì)在指定時(shí)間后往事件隊(duì)列里面插入一個(gè)任務(wù).由此可知settimeout(0)里面的操作會(huì)放在所有主線程任務(wù)之后. 這也就解釋了為什么第一個(gè)實(shí)驗(yàn)結(jié)果是1->3-2 


當(dāng)一個(gè)事件被觸發(fā)時(shí)該線程會(huì)把事件添加到待處理隊(duì)列的隊(duì)尾,等待JS引擎的處理。這些事件可來自JavaScript引擎當(dāng)前執(zhí)行的代碼塊如setTimeOut、也可來自瀏覽器內(nèi)核的其他線程如鼠標(biāo)點(diǎn)擊、AJAX異步請(qǐng)求等,但由于JS的單線程關(guān)系所有這些事件都得排隊(duì)等待JS引擎處理。
主站蜘蛛池模板: 日本三级欧美三级人妇视频黑白配| 韩国三级大全久久网站| 熟妇与小伙子matur老熟妇e| 大屁股熟女白浆一区二区| 免费无码又爽又刺激软件下载 | 狠狠热精品免费视频| 无码人妻视频一区二区三区| 亚洲а∨天堂久久精品2021| 国产国拍亚洲精品mv在线观看| 国产精品无码一区二区在线看| 亚洲色一色噜一噜噜噜| 在线播放免费人成动漫视频| 日本私人vps一夜爽毛片| 中国china露脸自拍性hd| 国产精品久久久久久99人妻精品| 亚洲精品国产熟女久久久| 天天综合天天爱天天做| 免费观看性欧美大片无片| 男人靠女人免费视频网站| 亚洲a无码综合a国产av中文| 国产无遮挡裸体美女视频| 国产av国内精品jk制服| 无码中文人妻在线三区| 欧美巨大黑人精品videos| 无码国产精品一区二区免费i6| 樱花草在线社区www韩国| 国产亚洲欧美看国产| 色婷婷狠狠久久综合五月| 欧美乱码卡一卡二卡三新区| 精品h动漫无遮挡在线看中文| 亚洲另类春色校园小说| 国产亚洲色婷婷久久99精品 | 亚洲欧美一区久久牛牛| 日本边添边摸边做边爱的网站| 曰欧一片内射vα在线影院| 中文字幕在线日亚洲9| 亚洲另类激情综合偷自拍图| 七妺福利精品导航大全| 两性午夜刺激性视频| 亚洲 另类 熟女 字幕| 国产精品区一区二区三在线播放 |