BOM:JS执行队列(同步和异步)和JS执行机制

JavaScript原先是单线程语言,也就是同一时间只能做一件事。
单线程意味着,所有的任务需要排队,当前一个任务结束,才会执行下一个任务。如此导致的问题是:js执行时间过长,会造成页面渲染不连贯,及页面渲染加载阻塞的感觉。
为解决该问题,HTML5允许脚本创建多个线程。于是,JS中就出现了同步和异步

- 同步:
前一个任务结束后再执行下一个任务,是同步的,比如做饭的同步做法:等水煮开后(15分钟),再去洗菜,切菜,炒菜。

  • 异步:
    在做这件事的同时,可以去处理其他事情,比如做饭的异步做法:在水煮开的同时,利用这15分钟去洗菜,切菜,炒菜。
<script>
console.log(111);
setTimeout(function(){
	console.log(333);
},2000)
// 先输出111 然后是222 最后是333
// 222不会等着333过2秒后再输出
console.log(222); 
</script>

同步任务:
同步任务都在主线程上执行,形成一个执行栈。
在上面的代码中,console.log(111)是同步任务,setTimeout()是同步任务,console.log(222)也是同步任务。
异步任务:
JS的异步是通过回调函数实现的。
常见的异步任务:

  • 普通事件,比如:click
  • 资源加载,比如:load
  • 定时器,比如:setInterval、setTimeout

setTimeout里的function函数就不属于同步任务,属于异步任务,会放到异步任务中的任务队列中。

  • 那么同步任务和异步任务JS是如何执行的?机制是什么?

1.先执行同步任务;
2.把异步任务(回调函数)放到任务队列中;
3.当同步任务执行完毕,系统会按次序读取任务队列中的异步任务,读取到该异步任务后,再次进入同步任务中,然后再执行。
4.先同步任务后异步任务

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值