前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaScript进阶--事件机制

JavaScript进阶--事件机制

原创
作者头像
软件架构师Michael
发布2022-08-14 09:33:00
4160
发布2022-08-14 09:33:00
举报
文章被收录于专栏:软件工程师Michael

JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事 单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等着。于是,所有任务可以分成两种,一种是同步任务,另一种是异步任务

同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;

异步任务指的是,不进入主线程、而进入"任务队列" 的任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。

  1. 所有同步任务都在主线程上执行,形成一个执行栈。
  2. 主线程之外,还存在一个"任务队列"。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件
  3. 一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行
  4. 主线程不断重复上面的第3步
代码语言:javascript
复制
console.log(1);
setTimeout(function() {
    console.log(2);
},1000)
setTimeout(function() {
    console.log(3);
},0)
console.log(4);
/*
    分析:
        同步任务,按照顺序一步一步执行
        异步任务,当读取到异步任务的时候,将异步任务放置到任务队列
中,当满足某种条件或者说指定事情完成了(这里的是时间分别是达到了0ms和1000ms)当指定
事件完成了才从任务队列中注册到主线程的事件队列,当同步事件完成了,便从
事件队列中读取事件执行。(因为3的事情先完成了,所以先从任务队列中注册到
事件队列中,所以先执行的是3而不是在前面的2)
*/
 
 

【小结】

同步与异步不是JavaScript特有的概念,它是操作系统层面的东西,跟编程语言无关。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档