设置setTimeout延时为0ms的作用

当我们执行以下代码时,结果会按1、3、2的顺序弹出。

这是事件循环机制,因为js是单线程的,是基于事件循环的。而setTimeout函数是异步的,异步的事件会加入一个队列,会等到当前同步的任务执行完毕后,再执行setTimeout队列的任务。所以,通过设置任务在延迟0毫秒后执行,就能改变任务执行的先后顺序,延迟该任务发生,改变它所调用的函数的优先级,使之异步执行。

例如:

1. 下面这段代码,是不会实时获取到输入框里面的内容的。

<input type="text" onkeydown="test(this.value)">  
<div></div>  
<script">  
  function test(val) {  
    document.getElementsByTagName('div')[0].innerHTML = val;  
  }  

可以发现,每按下一个字符时,< div > 中只能显示出之前的内容,无法得到当前的字符。结果如下:

2. 利用 setTimeout延时为0,我们把取 value 的操作放入队列中,放在更新 value 值以后.

<input type="text" onkeydown="var that=this; setTimeout(function() {test(that.value)}, 0)">  
<div></div>  
<script">  
  function test(val) {  
    document.getElementsByTagName('div')[0].innerHTML = val;  
  } 

能够实时显示输入的内容,结果如下:

 

 

|| 版权声明
作者:云言
链接:https://yyink.cn/archives/367.html
声明:如无特别声明本文即为原创文章仅代表个人观点,版权归《云言博客》所有,欢迎转载,转载请保留原文链接。
THE END
分享
二维码
海报
设置setTimeout延时为0ms的作用
当我们执行以下代码时,结果会按1、3、2的顺序弹出。 这是事件循环机制,因为js是单线程的,是基于事件循环的。而setTimeout函数是异步的,异步的事件会加入……
<<上一篇
下一篇>>