setTimeout(func,0)的作用

setTimeout(func,0)的机制

这里其实说的就是Event Loop的知识,setTimeout的运行机制其实是将指定的代码移除本次执行,等到下一轮Event Loop的时候,在检查是否到了指定时间。如果到了,就执行相应代码,如果不到,就等到再下一轮Event Loop的时候重新判断。

setTimeout(func,0)将第二个参数设为0,作用是尽可能早的执行任务,但最早也要等到下一次Event Loop才会执行。

setTimeout(func,0)的应用

调整事件的发生顺序

比如某个div元素绑定了click事件,点击的时候冒泡到父元素,子元素的回调函数会优先于父元素触发。如果我们想要先父元素的回调函数先触发,就可以用到setTimeout(f,0)

var input = document.getElementsByTagName('input[type=button]')[0];
​input.onclick = function A() {  
    setTimeout(function B() {    
        input.value +=' input';  
    }, 0)
};​    
document.body.onclick = function C() { 
  input.value += ' body'
};

上面代码在点击按钮后,先触发回调函数A,然后触发函数C。在函数A中,setTimeout将函数B推迟到下一轮Loop执行,这样就起到了,先触发父元素的回调函数C的目的了。

利用setTimeout实现伪多线程

我们知道js是单线程的,容易出现阻塞。setTimeout一个很关键的作用就是分片,把复杂耗时的程序分成若干细小的任务放到setTimeout里面执行。