首先,setTimeout()和setInterval()
相同点:都被用作”定时器“,即指定事件在指定时间之后执行,内部运行机制完全相同
不同点:setTimeout()是一次性执行,setInterval()是反复执行
console.log(1);
setTimeout(function(){console.log(2);},1000);
console.log(3); //运行结果:1 3 2
那如果是setTimeout( foo, 0 )呢?0毫秒哎,foo是不是会马上执行?
不会!不会!不会! setTimeout( foo, 0 )的意思是,把foo在0ms内推入任务队列,而浏览器会继续执行执行栈中的事件,当执行栈空了,才会把任务队列中的foo事件推入执行栈执行。如果当前执行栈的事件很多,foo还是得继续等着哦,等到执行栈中的事件全部执行完了,foo才能进入到执行栈中执行。所以不是在0毫秒后就立即执行foo的意思。
那么setTimeout( foo, 0 )有什么作用呢?
同步变异步,降低foo事件优先级,把它放到后面执行。