setTimeout與取號機之間的關係

2022-03-13 18:52:06 字數 1014 閱讀 9880

那麼問題來了,這個id是幹嘛用的,為什麼輸出了10個4144 ? 

首先查了一下w3c,上面對settimeout是這麼解釋的:settimeout() 方法用於在指定的毫秒數後呼叫函式或計算表示式。關於它的返回值解釋在度娘上很少,或許是我搜的問題,最近google要fq才能用了,不爽。我也不管他娘是怎麼給它定義的,反正理解成系統分配給它的號碼就行了,簡單粗暴。這個號碼與瀏覽器當前的執行環境有關。所以你執行上面的**,不一定是這個數字. 這就好比同乙個人去每個銀行的取號機上拿到的號碼不一定相同是乙個道理。

下面接著說那個輸出10個4144的問題。其實這個問題是乙個老生常談的問題了,本質上都是非同步的問題。

我上面說了,settimeout用於在指定的毫秒數後做某事,而for迴圈裡邊是當前立即開始要做的事。我們的cpu雖然一次只能做一件事,但是它的速度是很快的,一秒鐘都可以完成n多件事情(n等於乙個很大的數)。上面的**等價於:

var

id;for(var i=0;i<10;i++),1000);

}

所以當第乙個settimeout執行的時候,for迴圈早就完成了,id的值也就是最後那個settimeout返回的id。 所以輸出10個一樣的id值,也就不足為怪了。

如果想要檢視每乙個settimeout返回的id是多少,直接這樣寫就可以了:

var

id;for(var i=0;i<10;i++),1000);

console.log(id)

}

雖然settimeout裡邊的任務是指定時間後執行,但是它的id值是即時返回的,就比如你取號的時候,不管要過久才能輪到你,但是只要你點了取號機,它就會立即列印給你。

這個過程是同步的。當然,關於settimeout還有很多知識點,也有很多坑,但是只要注意它這裡有個非同步的問題,大多數情況都可以避免。

51微控制器0號與1號外部中斷例項

cpu在處理某一事件a時,發生了另一事件b請求cpu迅速去處理 中斷發生 cpu暫時中斷當前的工作,轉去處理事件b 中斷響應和中斷服務 待cpu將事件b處理完畢後,再回到原來事件a被中斷的地方繼續處理事件a 中斷返回 這一過程稱為中斷。我第一眼看見這東西,感覺跟函式巢狀呼叫的過程特別像。cpu對中斷...

為什麼銀行有取號機而超市結賬的時候沒有

個人理解如下 銀行有取號機的原因 櫃檯的人員相當於共享資源,而每乙個客戶相當於乙個程序,取號的原因是共享資源一次只能使乙個程序占用,由於每個程序占用的時間不同,這樣就設定了乙個優先順序,所以當排隊程序看到共享資源被占用,則該程序可以去處理其他業務,當共享資源被釋放,喚醒優先順序較高的程序,使之占用該...

R語言入門之 箭頭( )與等於號( )的區別

3 總結與擴充套件 對於r語言的初學者,往往會遇到 和 這兩個賦值符號,本文本主要用箭頭和賦值來稱呼這兩個符號,但是這兩個符號有啥區別呢。這篇文章盡力的去講明白這個事情。為剛剛入門的小白提供一點指導。系統學過r語言的人應該會知道r語言都知道r語言的前身是s語言。在初始的程式設計軟體被開發出來的時候等...