成人免费在线观看视频-国产绿帽子多p交换视频-精品国产一区av-免费xx视频-人妻熟妇乱又伦精品视频中文字幕-特级毛片内射www无码

setTimeout() 引發的新認識

2020/11/12 12:01:29   閱讀:3959    發布者:3959
setTimeout() 方法用于在指定的毫秒數后調用函數或計算表達式。

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


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

    </script>


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


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

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


當一個事件被觸發時該線程會把事件添加到待處理隊列的隊尾,等待JS引擎的處理。這些事件可來自JavaScript引擎當前執行的代碼塊如setTimeOut、也可來自瀏覽器內核的其他線程如鼠標點擊、AJAX異步請求等,但由于JS的單線程關系所有這些事件都得排隊等待JS引擎處理。
主站蜘蛛池模板: 国产亚洲欧洲日韩在线...| 久久久久久妓女精品影院| 人妻无码第一区二区三区| 日本熟妇人妻中出| 国产成人8x人网站视频在线观看| 国产精品.xx视频.xxtv | 亚洲色无码播放| www国产精品内射老熟女| 免费无码黄十八禁网站| 天天躁日日躁狠狠躁欧美老妇小说 | 久爱www人成免费网站| 久久久精品人妻一区二区三区蜜桃 | 成人天堂资源www在线| 成年美女看的黄网站色戒 | 国产真实露脸乱子伦| 久久久久蜜桃精品成人片| 99精品热在线在线观看视频| 国产欧美一区二区精品性色| av在线播放日韩亚洲欧我不卡| 精品亚洲aⅴ在线观看| 精品国产系列在线| 成人爽a毛片免费| 中文字幕色av一区二区三区| 亚洲色偷偷偷鲁精品| 吃奶摸下的激烈视频| a国产在线v的不卡视频| 国产精品久久无码一区| 日本无卡无吗二区三区入口| 欧美日韩一区二区三区在线观看视频| 毛茸茸厕所偷窥xxxx| 最近更新中文字幕| 国产午夜福利视频在线观看| 成人区人妻精品一区二区不卡网站| 国产精品区免费视频| 国产成人拍精品视频午夜网站| 国产又色又爽无遮挡免费动态图| 国产精品人妻99一区二区| 精品无码人妻被多人侵犯av| 成人无码黄动漫在线播放| 无码一区二区三区视频| 国产精品一区二区av不卡|