JS执行机制

console.log(1);
setTimeout(function(){
	console.log(3);
},1000);
console.log(2);

上面一段代码的输出结果为:1、2、3
这是因为setTimeout需要1s的时间才能执行,JS可异步执行,所以先输出2
但是有一个问题,当setTimeout的时间变为0时(代码如下),输出结果还是1、2、3

console.log(1);
setTimeout(function(){
	console.log(3);
},0);
console.log(2);

整个原因关键在于JS的执行机制
先来说说JS中同步任务和异步任务
1、同步任务
同步任务都在主线程上执行,形成一个执行栈
2、异步任务
js中的异步任务是通过回调函数来完成的,一般而言,异步任务有以下三种类型
(1)普通事件,如click,resize等
(2)资源加载,如load,error等
(3)定时器,包括setTimeout,setInterval等
而异步任务相关回调函数添加到任务队列中(任务队列也称为消息队列)
清楚了同步任务和异步任务,就来说说JS的执行机制
JS的执行机制
1、先执行执行栈中的同步任务
2、异步任务(回调函数)放入任务队列中
3、一旦执行栈中的所有同步任务执行完毕了,系统就会按次序读取任务队列中的异步任务,被读取的异步任务就会结束等待,进入执行栈,开始执行,所以即使上面的时间为0,还是先执行其他,再来执行回调函数
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值