es6——异步编程

异步编程

js是单线程的,同一时间只能做一件事情。js设置为单线程是为了避免复杂性和dom渲染冲突。

单线程意味着前一个任务结束才会执行后一个任务。如果前一个任务耗时很长,则后一个任务不得不被等待!!!!但是大多耗时较长的都是io任务(输入输出任务,网络的请求与回应),因此让cpu空闲去等待io任务,效率会很低下,所以我们可以不管io设备,挂起等待中的任务,先运行后面的任务,等io设备返回了结果再把挂起的任务执行下去。!!!!!

同步任务:你走了我再走,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务。

异步任务(需要等待的任务):你走一截,我走一截。不直接进入主线程,而进入“任务队列"的任务通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。


异步任务的运行机制

任务队列就是一个消息队列,io完成一项任务就会在消息队列中添加一个事件,表示相关的异步任务可以进入执行栈了!!!!

1.所有同步任务都在主线程上,形成一个执行栈

2.主线程之外还有个任务队列,只要异步任务运行结果(被人点击了),就在任务队列之中放置一个事件

3.一旦执行栈中同步任务执行完毕,系统就会读取任务队列

4.只要执行栈一清空,事件队列队首就会进去

如此循环

事件队列中放哪些事件:io设备,鼠标点击,指定过回调函数的事件(注册事件:给这个事件绑定了回调函数)

es6种有两种事件队列:宏任务和微任务:先拿宏任务,再去拿微任务,只要微任务队列里面有,就清空微任务队列。在执行下一个宏任务之前必须清空微任务队列


定时器事件

setTimeout()一次执行,setInterval()反复执行

    <SCript>
        console.log("START");
        setTimeout(function(){
            console.log("等哈");
        },1000)
        console.log("结束了");
    </SCript>
    <SCript>
        console.log("START");
        setTimeout(function(){
            console.log("等哈");
        },0)
        console.log("结束了");
    </SCript>

两者等哈两个字都是最后出现的,为什么???

先将执行栈执行完再执行settimeout!!!定时器再1秒后被放在了任务队列,规定了最小时间为4ms,如果低于这个值会自动改为4ms


异步返回值

在回调函数中包含要使用异步返回值的代码,将异步结果作为该函数的参数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值