摘要:單線程首先是單線程,任務隊列采用先進先出,因此前面的任務不執行完,后面的任務是無法執行的,會造成阻塞。以前我一直認為如果后面的參數為,那么兩秒后該函數就會執行。可實際上并不是這樣。
單線程
首先js是單線程,任務隊列采用“先進先出”,因此前面的任務不執行完,后面的任務是無法執行的,會造成阻塞。
setTimeout函數我們都知道該函數接受兩個參數,第一個參數為字符串或者函數,第二個為延遲的時間,單位為毫秒。以前我一直認為如果后面的參數為2000,那么兩秒后該函數就會執行。可實際上并不是這樣。你應該這樣理解,settimeout函數是在指定的延遲時間后,將該任務加入到js的任務隊列中,具體執行的時間取決于任務隊列中位于該任務前面所有任務的執行時間。
let a = 1; settimeout(function(){ console.log(1111); },1000); while(a>0){ a++ }
以上代碼永遠也不會輸出1111。1s后任務加入到任務隊列,因為前面是死循環,永遠也執行不完,所以后面的語句無法執行。如果延遲時間為0,會出現什么狀況?
setTimeout(function(){ console.log(1111); },0); fun one();
即使延遲變為0,也是先執行fun one()函數,然后輸出1111。
那么問題來了,在延遲為0的情況下,fun one()執行100遍,結果會是怎么樣的?
setTimeout(function(){ console.log(1111); },0); fun one(); fun one(); fun one(); fun one(); ...
不管后面有多少個函數,setTimeout里面的函數總是最后執行,即使延遲為0。有點奇怪,延遲參數設為0,也要排到后面。
最后需要說的一點就是,setTimeout函數用的是eval()函數,如果傳入字符串,會被解析為函數語句執行,但是這存在一定的風險,所以setTimeout最好是傳入函數,而不是字符串。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/84701.html
摘要:前言最近在學前幾天看到兩道題剛開始看懵懵懂懂這幾天通過各種查資料慢慢的理解頓悟了對匿名函數閉包立即執行函數的理解也更深了一點在此分享給大家我的理解與總結希望能幫助大家理解因為這篇文章是我用心總結的查閱了很多的資料所以總結的比較細篇幅較長如果 前言 最近在學JS,前幾天看到兩道題,剛開始看懵懵懂懂,這幾天通過各種查資料,慢慢的理解,頓悟了,對匿名函數,閉包,立即執行函數的理解也更深了一點...
摘要:什么是裝飾器模式向一個現有的對象添加新的功能,同時又不改變其結構的設計模式被稱為裝飾器模式,它是作為現有的類的一個包裝。中的裝飾器模式中有一個的提案,使用一個以開頭的函數對中的及其屬性方法進行修飾。 1 什么是裝飾器模式 showImg(https://segmentfault.com/img/remote/1460000015970102?w=1127&h=563); 向一個現有的對...
摘要:廣義說一切通過改變的視覺呈現都叫動畫例如,按鈕,鏈接等元素交互反饋。狹義說通過定時器連續調用函數進行元素屬性改變產生的視覺動畫效果。 廣義說:一切通過js改變的視覺呈現都叫動畫;例如,按鈕,鏈接等元素交互反饋。狹義說:通過定時器連續調用js函數進行元素屬性改變產生的視覺動畫效果。 定時器 定時器是JavaScript動畫的核心技術;setTimeout(),setInterval()是...
摘要:廣義說一切通過改變的視覺呈現都叫動畫例如,按鈕,鏈接等元素交互反饋。狹義說通過定時器連續調用函數進行元素屬性改變產生的視覺動畫效果。 廣義說:一切通過js改變的視覺呈現都叫動畫;例如,按鈕,鏈接等元素交互反饋。狹義說:通過定時器連續調用js函數進行元素屬性改變產生的視覺動畫效果。 定時器 定時器是JavaScript動畫的核心技術;setTimeout(),setInterval()是...
閱讀 1751·2021-09-28 09:43
閱讀 1111·2021-09-23 11:22
閱讀 2707·2021-09-14 18:05
閱讀 1823·2019-08-30 15:52
閱讀 2812·2019-08-30 10:55
閱讀 2007·2019-08-29 16:58
閱讀 1323·2019-08-29 16:37
閱讀 3031·2019-08-29 16:25