首頁 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脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
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)

鬥魚直播怎麼關閉延遲? -鬥魚直播怎麼看回放? 鬥魚直播怎麼關閉延遲? -鬥魚直播怎麼看回放? Mar 18, 2024 am 10:55 AM

鬥魚直播怎麼關閉延遲? -鬥魚直播怎麼看回放?

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

隊列技術在PHP與MySQL中的消息延遲和訊息重試的應用

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

如何解決Java中的網路延遲問題

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

settimeout和setinterval有什麼差別

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

如何解決Windows 10滑鼠拖曳視窗時的延遲問題

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

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

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

超級人類登入發生延遲請重試解決方法

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

中國最強AI研究院的大模型為何遲到了

See all articles