setTimeout(foo,0)可以写成foo()吗?

首先,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事件优先级,把它放到后面执行。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值