午夜大片爽爽爽免费影院丨色综合色综合久久综合频道88丨日韩人妻无码中文字幕视频丨一本无码久本草在线中文字幕dvd丨国产午夜亚洲精品国产成人

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

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

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


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

    </script>


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


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

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


當(dāng)一個事件被觸發(fā)時該線程會把事件添加到待處理隊列的隊尾,等待JS引擎的處理。這些事件可來自JavaScript引擎當(dāng)前執(zhí)行的代碼塊如setTimeOut、也可來自瀏覽器內(nèi)核的其他線程如鼠標(biāo)點擊、AJAX異步請求等,但由于JS的單線程關(guān)系所有這些事件都得排隊等待JS引擎處理。
主站蜘蛛池模板: 国产高清japanese在线播放e| 国产精品久久久久永久免费看| 欧美在线 | 亚洲| 国语对白嫖老妇胖老太| 国产精品无码v在线观看| 亚洲国内精品自在线影院牛牛| 亚洲视频日韩视欧美视频| av制服丝袜白丝国产网站| 日本精品无码一区二区三区久久久 | 俄罗斯丰满熟妇hd| 蜜臀av国产精品久久久久| 国产-第1页-草草影院ccyy| 免费国精产品—品二品| 日韩精品久久久久久久电影蜜臀| 麻豆成人国产亚洲精品a区| 亚洲线精品一区二区三区影音先锋| 亚洲人成无码网站| 国产精品无码制服丝袜网站| 亚洲欧洲自拍拍偷精品网| 中文字幕丰满伦子无码ab| 色噜噜亚洲精品中文字幕| 国产精品视频2020年最新视频| 国产午夜精品av一区二区麻豆| 久久人妻少妇嫩草av无码专区| 亚洲欧美日韩国产制服另类| 人妻少妇中文字幕久久| 少妇三级全黄| 成人免费无码精品国产电影| 无码国产69精品久久久久app| 国产一区二区三区乱码| 国产精品特级毛片一区二区三区| 麻豆传传媒久久久爱| 天堂亚洲免费视频| 国产精品18久久久久久欧美| 久久精品国产99国产精2020丨| 亚洲熟妇自拍无码区| 日韩毛片免费无码无毒视频观看| 国产亚洲精品a在线观看| 最新国产精品剧情在线ss| 成人精品动漫一区二区| 国产啪精品视频网站丝袜|