JS-执行机制篇

1. JS 是单线程

  1. JS语言的一大特点就是单线程,也就是说同一时间只能做一件事情
  2. 这是因为JS这门脚本语言诞生的使命所致(JS是为处理页面中用户的交互,以及操作DOM诞生的)。
  3. 比如对某个DOM元素进行添加删除操作,不能同时进行,应该先添加后删除

2. JS 单线程导致的问题

  1. 单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。
  2. 这样所导致的问题是:如果JS执行时间过长就会造成页面渲染不连贯,导致页面渲染加载阻塞的感觉
  3. 比如定时器的延迟时间,就需要等待

3. 同步和异步

  1. 为了解决单线程的问题,利用多核CPU的计算能力,HTML5 提出Web Worker标准,允许JS脚本创建多个线程
    于是JS出现了同步异步
  2. 同步:前一个任务执行完再执行后一个任务,程序的执行顺序与任务的排列顺序是一致的、同步的。
  3. 异步:在做一件事情的时候,因为这件事情会花费很长时间,在做这件事情的同时,还可以去处理其它事情

4. 同步任务

  1. 同步任务都在主线程上执行,形成一个执行栈
    在这里插入图片描述

5. 异步任务

  1. JS 的异步是通过回调函数实现的。
  2. 一般而言,异步任务有以下三种类型
    a. 普通事件,如:click、resize等
    b. 资源加载,如:load、error等
    c. 定时器,setInterval、setTimeout等
  3. 异步任务相关的回调函数添加到任务队列中(任务队列也称为消息队列)
    在这里插入图片描述

6. JS执行机制

  1. 先执行执行栈中的同步任务
  2. 异步任务(回调函数)放入任务队列中
  3. 一旦执行栈中的所有同步任务执行完毕,系统会按次序读取任务队列中的异步任务,于是被读取的异步任务结束等待状态,进入执行栈,开始执行,执行完之后,主线程再查询任务队列有没有任务,有就取出来放到执行栈中执行
  4. 由于主线程不断重复的获得任务、执行任务、再获得任务、再执行,所以这种机制被称为事件循环(eventloop)
    在这里插入图片描述
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值