setTimeout如何把時間設定為0
本文主要介紹了關於setTimeout時間設定為0的相關內容,setTimeout( ) 是屬於window 的method, 但我們都是略去window 這頂層容器名稱, 這是用來設定一個時間, 時間到了, 就會執行一個指定的method,下面這篇文章主要給大家介紹了關於setTimeout時間設定為0的相關資料,需要的朋友可以參考下。
1、開胃菜,為何setTimeout
#首先看一下w3school上面對於setTimeout的解釋
#setTimeout(fn,millisec) 方法用於在指定的毫秒數後呼叫函數或計算表達式。
很簡單,setTimeout()
只執行fn 一次,到底什麼時候執行取決於第二個參數millisec設定的毫秒數,所以很多人習慣上稱之為延遲,無非就是延遲一段時間後再執行裡面的程式碼。
setTimeout(function(){ console.log('我是setTimeout'); }, 1000);
正常情況下,我是setTimeout 這句話並不會馬上輸出而是等1000毫秒以後會在瀏覽器的控制台輸出。
2、主菜,js是單執行緒的
#OK,看一個例子,這個例子的輸出結果是什麼?
setTimeout(function(){ console.log(1); }, 0); console.log(2); console.log(3);
出乎某些人的意料,得到的結果竟然是2、3、1。這似乎不按套路出牌啊,明明是等待了0毫秒也就是不等待直接輸出啊,為啥1卻在最後輸出了呢?
這就需要搞清楚一個很重要的概念:js是單執行緒的,單執行緒就意味著,所有任務需要排隊,前一個任務結束,才會執行後一個任務。如果前一個任務耗時很長,後一個任務就得一直等著。
其實很好理解,就像大家去超市買東西一樣,所有買東西的人都需要在收銀台排隊結帳,正常情況下每個收銀台同一時間只能為一位顧客結帳,這位顧客結帳完成才能為下一位顧客服務。
而瀏覽器的核心是多線程的,它們在核心製控下相互配合以保持同步,一個瀏覽器至少實現三個常駐線程:javascript引擎線程,GUI渲染線程,瀏覽器事件觸發線程。
javascript引擎是基於事件驅動單執行緒執行的,JS引擎一直等待著任務佇列中任務的到來,然後加以處理,瀏覽器無論何時都只有一個JS執行緒在運行JS程式。
GUI渲染執行緒負責渲染瀏覽器介面,當介面需要重繪(Repaint)或由於某種操作引發回流(reflow)時,該執行緒就會執行。但要注意 GUI渲染執行緒與JS引擎是互斥的,當JS引擎執行時GUI執行緒會被掛起,GUI更新會被保存在一個佇列中等到JS引擎空閒時立即執行。
事件觸發線程,當一個事件被觸發時該線程會把事件加到待處理佇列的隊尾,等待JS引擎的處理。這些事件可來自JavaScript引擎目前執行的程式碼區塊如setTimeOut、也可來自瀏覽器核心的其他執行緒如滑鼠點擊、AJAX非同步請求等,但由於JS的單執行緒關係所有這些事件都得排隊等待JS引擎處理。 (當執行緒沒有執行任何同步程式碼的前提下才會執行非同步程式碼)
#其實,當js程式碼執行遇到setTimeout(fn,millisec)
時,會把fn這個函數放在任務佇列中,當js引擎執行緒空閒時並達到millisec指定的時間時,才會把fn放到js引擎執行緒中執行。
setTimeout(fn,0)
的意思是,指定某個任務在主執行緒最早可得的空閒時間執行,也就是說,盡可能早得執行。它在"任務佇列"的尾部新增一個事件,因此要等到同步任務和"任務佇列"現有的事件都處理完,才會執行。
HTML5標準規定了setTimeout()
的第二個參數的最小值(最短間隔),不得低於4毫秒,如果低於這個值,就會自動增加。在此之前,舊版的瀏覽器都將最短間隔設為10毫秒。另外,對於那些DOM的變動(尤其是涉及頁面重新渲染的部分),通常不會立即執行,而是每16毫秒執行一次。這時使用requestAnimationFrame()
的效果比setTimeout()
好。
要注意的是,setTimeout()
只是將事件插入了"任務佇列",必須等到目前程式碼(執行堆疊)執行完,主執行緒才會去執行它指定的回調函數。要是目前程式碼耗時很長,有可能要等很久,所以沒有辦法保證,回呼函數一定會在setTimeout()
指定的時間執行。
3、甜點,setTimeout的妙用
#其實setTimeout是有一些妙用的,這裡簡單列舉幾個。
函數去抖動
让一个函数在一定间隔内没有被调用时,才开始执行被调用方法。比如当你在使用 google 搜索内容的时候,有些关键词输入到一半,谷歌会展示一个可选列表,根据你当前输入的内容作出的一个猜测联想。需要监听文字改变,每一次改变都会调用一次回调函数,现在需要的一种实现是在用户停止键盘事件一段时间后,去发送一个请求。
var debounce = function(method, context) { clearTimeout(method.tId); method.tId = setTimeout(function(){ method.call(context); },100); }
轮训任务
js中可以使用setInterval开启轮询,但是这种存在一个问题就是执行间隔往往就不是你希望的间隔时间。
比如有个轮询任务间隔是100ms,但是执行方法的时间需要450ms,那么在200ms、300ms、400ms本来是计划中执行任务的时间,浏览器发现第一个还未执行完,那么就会放弃2、3、4次的任务执行,并且在500ms之后再次执行任务,这样的话,其实再次执行的间隔就只有50ms。使用setTimeout构造轮询能保证每次轮询的间隔。
setTimeout(function () { console.log('我被调用了'); setTimeout(arguments.callee, 100); }, 100);
延迟js引擎的调用
var p = document.createElement('p'); p.innerHTML = '我是一个p'; p.setAttribute('style', 'width:200px; height:200px;background-color:#f00; '); document.body.appendChild(p); setTimeout(function() { console.log('我被调用了'); }, 1000);
虽然setTimeout有一些妙用,但是他确实是在宏观任务队列中新增任务了,所以万万不能滥用啊。
相关推荐:
javascript函数setTimeout带参数用法实例详解
以上是setTimeout如何把時間設定為0的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

在抖音上發布作品能夠更吸引關注和點贊,但有時候我們可能難以即時發布作品,這時就可以利用抖音的定時發布功能。抖音的定時發布功能可讓使用者在預定的時間自動發布作品,這樣可以更好地規劃發布計劃,增加作品的曝光率和影響力。一、抖音如何設定定時發布作品時間?若要設定定時發佈作品時間,先進入抖音個人首頁,在右上角找到「+」按鈕,點選進入發佈頁面。在發布頁面右下角有一個鐘錶的圖標,點擊進入定時發布介面。在介面中,你可以選擇要發布的作品類型,包括短影片、長影片和直播等。接下來,你需要設定作品的發佈時間。抖音提供了

VSCode設定中文:完整指南在軟體開發中,VisualStudioCode(簡稱VSCode)是一個常用的整合開發環境。對於使用中文的開發者來說,將VSCode設定為中文介面可以提升工作效率。本文將為大家提供一個完整的指南,詳細介紹如何將VSCode設定為中文介面,並提供具體的程式碼範例。第一步:下載安裝語言包開啟VSCode後,點選左

抖音作為全球最受歡迎的短影片平台之一,讓每個人都能成為創作者,分享生活中的點點滴滴。對於抖音使用者來說,標籤是一個非常重要的功能,它可以幫助使用者更好地分類和檢索內容,同時也能讓平台更精準地推送合適的內容給使用者。那麼,抖音標籤在哪裡設定呢?本文將詳細介紹如何在抖音上設定和使用標籤。一、抖音標籤在哪裡設定?在抖音上使用標籤可以幫助使用者更好地分類和標記自己的作品,讓其他使用者更容易找到並關注。設定標籤的方法如下:1.開啟抖音APP,並登入你的帳號。 2.點選畫面下方的「+」號,選擇「發表」按鈕。 3.

wallpaperengine是個很受歡迎的壁紙軟體,那要怎麼設定壁紙呢?使用者需要先啟動這個軟體,然後點擊一張壁紙,雙擊壁紙後,就能夠自動進行設定了,這篇設定壁紙方法介紹就能夠告訴大家具體的方法,下面就是詳細的介紹,大家趕緊來看看吧。 wallpaperengine怎麼設定壁紙答:雙擊壁紙後就能夠自動設定具體方法:1.先在steam點擊這個軟體啟動。 2.選擇啟動wallpaperengine壁紙引擎3、進入介面後,選擇一張喜歡的壁紙,點擊確認就能夠使用了。 4.右邊會有一些設定按鍵,可以依需求

1.開啟微博客戶端,在編輯頁面中點選三個小點,再點選定時發。 2.點擊定時發之後,在發佈時間右側就有時間選項,設定好時間,編輯好文章,點擊右下角的黃色字定時發布即可。 3.微博手機端暫時不支援定時發布,只能在PC客戶端使用該功能哦!

即使在「請勿打擾」模式下接聽電話也可能是一種非常煩人的體驗。顧名思義,請勿打擾模式可關閉來自郵件、訊息等的所有來電通知和警報。您可以按照這些解決方案集進行修復。修復1–啟用對焦模式在手機上啟用對焦模式。步驟1–從頂部向下滑動以存取控制中心。步驟2–接下來,在手機上啟用「對焦模式」。專注模式可在手機上啟用「請勿打擾」模式。它不會讓您的手機上出現任何來電提醒。修復2–更改對焦模式設定如果對焦模式設定中存在一些問題,則應進行修復。步驟1–打開您的iPhone設定視窗。步驟2–接下來,開啟「對焦」模式設

抖音推薦和精選在哪裡設置?在抖音短視頻中是有精選和推薦兩個分類,多數的用戶不知道推薦和精選如何的設置,接下來就是小編為用戶帶來的抖音推薦和精選設定方法教程,有興趣的用戶快來一起看看吧!抖音使用教學抖音推薦和精選在哪裡設定1、先開啟抖音短影片APP進入主頁面,點選右下角【我】專區選擇右上角【三個橫線】;2、之後在右側會展開功能欄,滑動頁面選擇最底部的【設定】;3、然後在設定功能頁面,找到其中的【個人資訊管理】服務;4、最後跳到個人資訊管理頁面,滑動【個人化內容推薦】後方的按鈕即可設定。

大麥網購票時,為了確保能夠準確掌握購票時間,用戶可以設定一個懸浮時鐘來進行搶票,詳細的設定方法就在下文中,讓我們一起學習下吧。大麥綁定懸浮時鐘方法1.在手機中點擊開啟懸浮時鐘app進入介面後,在設定秒殺提查的位置點擊,如下圖所示位置:2.來到新增記錄的頁面後,把在大麥網中複製的買票連結頁面複製進去。 3.接下來在下方設定秒殺時間和通知時間,打開【儲存到日曆】後面的開關按鈕,並在下方點選【儲存】。 4.點選開啟【倒數計時】,如下圖所示:5.到提醒時間時在下方點選【開始畫中畫】的按鈕。 6.購票時間到時
