时间:2021-05-18
让我们看看我之前的文章:JavaScript的9个陷阱及评点,在第9点FocusPocus中提到的问题。原作者对这个认识有所偏差,其实不只是IE的问题,而是现有JavaScript引擎对于线程实现的问题(关于线程,我的概念其实不多,如果不对,希望读者多多指教)。.我们来看1和2。如果你能看看源代码,会发现我们的任务很简单,就是给文档增加一个input文本框,并聚焦和选中。请现在分别点击一下,可以看到,1并没有能够聚焦和选中,而2可以。它们之间的区别在于,在执行:
input.focus();
input.select();
时,2多了一个延迟时间为0的setTimeout的外围函数,即:
setTimeout(function(){
input.focus();
input.select();
},0);
按照JavaScript:TheDefinitiveGuide5th的14.1所说:
在实践中,setTimeout会在其完成当前任何延宕事件的事件处理器的执行,以及完成文档当前状态更新后,告诉浏览器去启用setTimeout内注册的函数。
其实,这是一个把需要执行的任务从队列中跳脱的技巧。回到前面的例子,JavaScript引擎在执行onkeypress时,由于没有多线程的同步执行,不可能同时去处理刚创建元素的focus和select事件,由于这两个事件都不在队列中,在完成onkeypress后,JavaScript引擎已经丢弃了这两个事件,正如你看到的例子1的情况。而在例子2中,由于setTimeout可以把任务从某个队列中跳脱成为新队列,因而能够得到期望的结果。
这才是延迟事件为0的setTimeout的真正目的。在此,你可以看看例子3,它的任务是实时更新输入的文本,现在请试试,你会发现预览区域总是落后一拍,比如你输a,预览区并没有出现a,在紧接输入b时,a才不慌不忙地出现。其实我们是有办法让预览区跟输入框同步地,在此我没有给出答案,因为上面所说的,就是解决思路,tryityourself!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
setTimeout()MDN对setTimeout的定义为:在指定的延迟时间之后调用一个函数或执行一个代码片段。语法setTimeout的语法非常简单,第一个
在淘宝买东西,假如先要延迟时间淘宝确认收货,进到待取货页面,挑选必须延迟时间淘宝确认收货的订单信息点一下延长收货选择项就可以了。但如果是在淘宝闲鱼延迟时间淘宝确
一、解释说明1、概述setTimeout:在指定的延迟时间之后调用一个函数或者执行一个代码片段setInterval:周期性地调用一个函数(function)或
抖音定位延迟时间没有具体的数字,定位延迟时间与手机网络信号有关,如果手机中的网络信号比较好的话,也就说网速比较快,那么抖音定位延迟时间就比较低。 抖音(抖音,
文中考试大纲:淘宝直播间延迟时间如何解决的?实际是哪里出了难题有关提到网络主播在做淘宝直播间的全过程中,最怕碰到的难题便是直播延迟,由于一旦产生延迟时间,便会一