美文网首页
设置setTimeout延迟时间为0时的作用

设置setTimeout延迟时间为0时的作用

作者: 千锋小书童 | 来源:发表于2020-03-13 21:10 被阅读0次

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

    alert(1);//第一个输出
    setTimeout(function() {
        alert(2);//待同步任务执行完毕之后才输出
    },0);
    alert(3);//第二个输出
    

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

    1. 下面这段代码,是不会实时获取到输入框里面的内容的。
    <input type="text" onkeydown="test(this.value)">  //有按键按下时触发test函数,传递参数为input框内的内容
    <div></div>  
    <script>  
      function test(val) {  
        document.getElementsByTagName('div')[0].innerHTML = val;  //div中出现按键按下时input框中的文本信息
      }
    </script>   
    

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


    1. 利用 setTimeout延时为0,我们把取 value 的操作放入队列中,放在更新 value 值以后.
    <input type="text" onkeydown="var that=this; setTimeout(function() {test(that.value)}, 0)">  //延时0ms执行test函数,变成异步操作
    <div></div>  
    <script>  
      function test(val) {  
        document.getElementsByTagName('div')[0].innerHTML = val;  
      }
    </script>  
    

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


    相关文章

      网友评论

          本文标题:设置setTimeout延迟时间为0时的作用

          本文链接:https://www.haomeiwen.com/subject/ibpyshtx.html