首頁 web前端 js教程 认识延迟时间为0的setTimeout_javascript技巧

认识延迟时间为0的setTimeout_javascript技巧

May 16, 2016 pm 07:04 PM
settimeout 延遲

让我们看看我之前的文章:JavaScript的9个陷阱及评点,在第 9 点 Focus Pocus 中提到的问题。原作者对这个认识有所偏差,其实不只是 IE 的问题,而是现有 JavaScript 引擎对于线程实现的问题(关于线程,我的概念其实不多,如果不对,希望读者多多指教)。. 我们来看 1 和 2。如果你能看看源代码,会发现我们的任务很简单,就是给文档增加一个 input 文本框,并聚焦和选中。请现在分别点击一下,可以看到,1 并没有能够聚焦和选中,而 2 可以。它们之间的区别在于,在执行:

input.focus();
input.select();
时, 2 多了一个延迟时间为 0 的 setTimeout 的外围函数,即:

setTimeout(function(){
 input.focus();
 input.select();
}, 0);
按照 JavaScript: The Definitive Guide 5th 的 14.1 所说:

在实践中,setTimeout 会在其完成当前任何延宕事件的事件处理器的执行,以及完成文档当前状态更新后,告诉浏览器去启用 setTimeout 内注册的函数。

其实,这是一个把需要执行的任务从队列中跳脱的技巧。回到前面的例子,JavaScript 引擎在执行 onkeypress 时,由于没有多线程的同步执行,不可能同时去处理刚创建元素的 focus 和 select 事件,由于这两个事件都不在队列中,在完成 onkeypress 后,JavaScript 引擎已经丢弃了这两个事件,正如你看到的例子 1 的情况。而在例子 2 中,由于setTimeout可以把任务从某个队列中跳脱成为新队列,因而能够得到期望的结果。

这才是延迟事件为 0 的setTimeout的真正目的。在此,你可以看看例子 3,它的任务是实时更新输入的文本,现在请试试,你会发现预览区域总是落后一拍,比如你输 a, 预览区并没有出现 a, 在紧接输入 b 时, a 才不慌不忙地出现。其实我们是有办法让预览区跟输入框同步地,在此我没有给出答案,因为上面所说的,就是解决思路,try it yourself! 

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1675
14
CakePHP 教程
1429
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
鬥魚直播怎麼關閉延遲? -鬥魚直播怎麼看回放? 鬥魚直播怎麼關閉延遲? -鬥魚直播怎麼看回放? Mar 18, 2024 am 10:55 AM

鬥魚直播怎麼關閉延遲? 1.用戶先點擊進入鬥魚直播,如圖所示。 2.接著用戶在“鬥魚直播”視窗中點擊“設定”,如圖所示。 3、然後在“設定”視窗中,點選“進階”,如圖所示。 4.最後用戶在「進階」視窗中,將「低延時模式預設為開啟」關閉就能取消延遲了,如圖所示。鬥魚直播怎麼看回放? 1.第一步,我們先找到電腦桌面上的鬥魚直播軟體圖標,然後右鍵單擊選擇“打開”選項2、第二步,打開鬥魚直播軟體之後,我們在頁面左側找到“關注”選項,點擊開啟該選項並在右側頁面中找到一個自己喜歡的主播,點擊「錄影」選項3、第三步,進

隊列技術在PHP與MySQL中的消息延遲和訊息重試的應用 隊列技術在PHP與MySQL中的消息延遲和訊息重試的應用 Oct 15, 2023 pm 02:26 PM

佇列技術在PHP與MySQL中的消息延遲和訊息重試的應用摘要:隨著Web應用程式的不斷發展,對於高並發處理和系統可靠性方面的需求越來越高。佇列技術作為一種解決方案,被廣泛應用於PHP與MySQL中,以實現訊息延遲和訊息重試的功能。本文將介紹隊列技術在PHP與MySQL中的應用,包括佇列的基本原理、使用佇列實現訊息延遲的方法和使用佇列實作訊息重試的方法,並給出

settimeout和setinterval有什麼差別 settimeout和setinterval有什麼差別 Aug 15, 2023 pm 02:06 PM

settimeout和setInterval的區別:1、觸發時間,settimeout是一次性的,它在設定延遲時間之後執行一次函數,而setinterval是重複性的,它會以設定的時間間隔重複執行函數;2、執行次數,settimeout只執行一次,而setinterval會一直重複執行,直到被取消。

藥到病除:一招制勝,徹底解決 PHP 伺服器優化難題,從此告別卡頓! 藥到病除:一招制勝,徹底解決 PHP 伺服器優化難題,從此告別卡頓! Feb 20, 2024 am 09:43 AM

PHP作为广受欢迎的WEB开发语言,但时常会遇到卡顿和延迟的问题。这不僅影响了用户體驗,也让开发者和运維人員感到头疼。为了解决这一难题,多方团队和机构提出了多种解决方案,其中一款脱颖而出,以其高效性和可靠性获得了众多赞誉。识别根源问题要解决php卡顿和延迟难题,第一步必须是识别根源問題。最常见的原因为:系统配置:缺乏足够的系统資源,包括CPU、RAM和磁盘空间。软件环境:PHP相关软件的配置不当,包括PHP本身、Web伺服器和相关插件。网络问题:缺乏穩固的网络,或PHP伺服器与其他系统之間的关系

如何解決Java中的網路延遲問題 如何解決Java中的網路延遲問題 Oct 08, 2023 am 11:21 AM

如何解決Java中的網路延遲問題網路延遲是指在資料傳輸過程中,由於各種原因導致資料的發送和接收之間出現的時間延遲。在進行網路通訊或開發網路應用程式時,我們經常會遇到網路延遲的問題。本文將介紹一些解決Java中網路延遲問題的方法,並提供具體的程式碼範例。一、使用多執行緒網路延遲通常是由於網路請求的阻塞所導致的。為了避免網路請求阻塞主線程,我們可以使用多線程來處理網

如何解決Windows 10滑鼠拖曳視窗時的延遲問題 如何解決Windows 10滑鼠拖曳視窗時的延遲問題 Jan 06, 2024 pm 05:28 PM

在使用win10系統的過程中,如果遇到了滑鼠拖曳視窗有延遲卡頓的情況,小編覺得應該是系統設定的問題或是驅動問題。可以嘗試重裝驅動或是在運行中使用main.cpl程式碼來解決問題,快來看看詳細的win10滑鼠拖曳視窗有延遲解決方法吧。 win10滑鼠拖曳窗口有延遲怎麼辦:方法一(有線無線通用):1、在win10系統桌面,按下「win+r」快捷鍵,開啟運作窗口,輸入:main.cpl然後回車確定。 2.然後開啟滑鼠屬性對話框,點擊滑鼠鍵,可以透過滑動「雙擊速度」中的遊標來調整滑鼠雙擊速度。 3、然後點擊

超級人類登入發生延遲請重試解決方法 超級人類登入發生延遲請重試解決方法 Mar 30, 2024 pm 08:31 PM

在超級人類遊戲中有玩家遇到了登入發生延遲。請重試。點擊確認按鈕將立即退出GeeGee客戶端的提示,今天小編就帶來了解決的方法,快來一起看看吧。超級人類登入發生延遲請重試解決方法「Steammustberunningtoplaythisgame」這個提示的大概意思是steam不允許運行這個遊戲。可能是因為沒有安裝steam的原因,也有可能是沒有用管理員身分執行的原因,也可能是卡片了的原因。解決方法:1.第一個方法是下載一個steam平台,並打開安裝盤,把crack資料夾裡的東西放到遊戲資料夾裡。 2

中國最強AI研究院的大模型為何遲到了 中國最強AI研究院的大模型為何遲到了 Jun 26, 2023 pm 07:43 PM

出品|虎嗅科技組作者|齊健編輯|陳伊凡頭圖|FlagStudio「OpenAI會再開源大模型嗎?」當智源研究院理事長張宏江向線上參加2023年智源大會的OpenAI首席執行官SamAltman問及開源問題時,SamAltman微笑表示,OpenAI未來會開放更多程式碼,但沒有具體的開源時間表。這樣的討論來自這次智源大會的議題之一——開源大模型。 6月9日,2023年智源大會在北京舉行,座無虛席。在大會現場,「算力」、「大模型」「生態」等與AI相關的字詞時不時出現在與會者的聊天中,還有這個產業鏈上的各家

See all articles