JS定時器和單線程異步特性


首先要說的是,定時器相關的方法都是屬於BOM方法,而定時器呢,它是用於在設定的時
間執行一段代碼,或者在給定的時間間隔內重復該代碼。具體函數:

setTimeout(callback, delay);//delay一定的時間后,執行回調函數只執行一次
setInterval(callback, delay);//每隔一段時間執行一次callback,反復執行
clearInterval(timer);//清除定時器

定時器確實很好用,但是卻又不好用,為什么這么說呢?
我們知道JS是單線程的,既然是單線程那么就很容易出現線程被堵塞的情況,怎么解決
呢?——異步!
當然JS是單線程的它本身是不能異步的,但JS的宿主環境(比如瀏覽器,node)是多線程
的,宿主環境通過某種方式(比如:node的事件驅動)使得JS具備了異步的特性。
為什么突然談起JS的單線程異步呢?因為定時器事件會被JS異步處理,什么意思?
用代碼來說:

1 var num = 1;
2 setTimeout(function() {
3     num++;
4     console.log(num);
5 }, 1000);
6 console.log(num); //結果並是不(2,1)而是(1,2)

為什么會這樣?前面說過了,JS會把定時器事件異步處理,也就是說它並不會等待定時器事件

處理完成后再執行下面的代碼,而是直接將定時器事件插入到事件隊列當中后,直接執行下面

的代碼,當定時器事件執行完成后JS再反過頭來執行定時器事件的回調部分代碼,這就是異步!

異步可以有效的防止JS線程被堵塞,且會有很高的效率,能夠使JS在有限的資源下做更多的事

情,這一點是很了不起的。(node中我們會大量接觸關於異步的問題)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM