国产麻豆一区二区精彩视频-国产麻豆一区精品视频-国产麻豆一区在线-国产毛a片久久久久无码-国产毛片av一区二区三区网站-国产毛片精品av一区二区

setTimeout() 引發的新認識

2020/11/12 12:01:29   閱讀:3761    發布者:3761
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引擎處理。
主站蜘蛛池模板: 日本免费一区二区三区a区 日本免费一区二区三区视频 | 99色在线播放 | 91日韩精品天海翼在线观看 | 无码一区二区三区在线观看 | 精品午夜中文字幕熟女人妻在线 | jiuse在线| 明星性猛交ⅹxxx乱大交 | 欧美成人tv | 国产高清视频免费观看 | 日韩精品亚洲一级在线观看 | 日韩视频 中文字幕 视频一区 | 日本黄页在线观看免费 | 国产良妇出轨视频在线观看 | 国产真人做爰毛片视频直播 | 秋霞a级毛片在线看 | 无码人妻精一区二区三区 | 日韩精品中文字幕在线观看 | 国产人妻人伦精品1国产盗摄 | 麻豆精品导航 | 国产自产v一区二区三区c | 精品国产av一区二区三区 | 国产伦理久久精品久久久久 | 两性视频在线 | 婷婷综合久久中文字幕 | 亚洲丁香色婷婷综合欲色啪 | 国产福利视频 | 香港三级台湾三级在线播放徐 | 成年女人毛片免费观看97 | 国产呻吟久久久久久久92 | 久久综合欧美成人 | 国产成人亚洲综合网站不卡 | 亚洲精品久久久一二三区 | 大学生被内谢粉嫩无套 | 黑鬼大战白妞高潮喷白浆 | 日韩成人在线观看 | a视频在线观看 | 国模小黎自慰gogo人体 | 久草热视频在线观看 | 欧美三级在线看 | 国产香蕉一区二区三区在线视频 | 日韩视频在线播放 |