筆記 js 關於定時器的理解

2022-07-09 12:48:11 字數 679 閱讀 6133

總所周知 js 裡面的 settimeout() 方法是用來設定某些功能在某段時間間隔之後執行的。但是今天看了高程對定時器的描述發現並不是這樣。

settimeout(function

(), 250);

如上設定乙個延遲執行的函式,字面上理解是匿名函式體內的**將會在 250毫秒後執行,但是事實並不是這樣。

js 執行**是單執行緒的,就是說只能逐個逐個執行(不知道說得對不對),將要執行的**看成一條時間軸,首先執行的**是script 標籤內的一些對生命週期後面要用到的**進行部署。當某段時間段空閒的時候,後面的**才會被迅速被執行。舉個例子:

例如現在指令碼裡有這樣一堆**:

var fn = function

()();

settimeout(

function

(), 250);

fn 這個自執行的函式執行的時候耗時300毫秒,然後才會到下面的 settimeout 函式執行。

換句話說 settimeout 函式的執行是當當前執行環境空閒的時候再延遲250毫秒執行自身的**塊,當執行完了 fn 函式之後,環境再開始執行settimeout 函式。

所以settimeout 這個函式實際上延遲了 300(fn 執行的時間) + 250(自身延遲時間)= 550毫秒 才被執行,有時候可能還會慢一點

關於定時器

定時器是個很有意思的東西,它很有用,但我認為這不是現代計算機的結構所擅長的事情。計算機適合做那些很大量的簡單重複工作,或者根據請求做出回應。dos時代是沒有程序執行緒等概念的,那時候要想做到定時真是有些麻煩 通常的做法是死迴圈不斷監測時間,發現時間到了就做特定的事情 當然你可以用delay,來指定等...

關於定時器

今天突然想到乙個問題,如果要設定乙個5分鐘的定時器,那麼時間使用5 minute和5 60 second有什麼區別呢?或者說,設定成後者,程式會不會更累呢,會不會每秒鐘都去檢查下是不是到期了?於是去翻了一下golang原始碼中time的newtimer部分,如下 原來人家這兒用的是duration,...

js學習筆記8 定時器

1.setinterval 和 settimeout 定時器 語法 setinterval 函式名,時間間隔 如 setinterval fn 1000 表示每隔1秒執行函式fn 兩者語法一致,setinterval 重複執行,settimeout 執行一次。2.clearinterval 和 cl...