关于javascript:javascript编程单线程之异步模式Asynchronous

28次阅读

共计 874 个字符,预计需要花费 3 分钟才能阅读完成。

异步模式Asynchronous

不会期待这个工作完结才开始执行下一个工作,开启之后立刻执行下一个工作,后续逻辑个别会通过回调函数的形式定义,异步模式对 js 十分重要,没有异步工作单线程的 js 语言就无奈同时解决大量耗时工作,单线程上面的异步最大的难点就是 代码的执行程序凌乱 Queue 是音讯队列队列也叫回调队列

打印消息给同步一样执行压栈弹栈,接下来就是倒计时器,setTimeOut 就是调用了 web apiweb api 独自运行不会阻塞 js 的执行, 开启倒计时器之后 setTimeOut的调用就曾经完结,会持续往下调用,同理压栈开启倒计时器弹栈, 最初打印消息之后对于这个匿名函数就曾经调用完了,这个时候咱们的调用栈就会被清空掉,当调用栈执行完之后,Evevt loop就会从音讯队列中取出第一个回调函数压入到调用栈,当倒计时器达到工夫之后就会把回调函数放入到回调队列中。timer2倒计时先完结所以会先放入音讯队列中的第一位, Evevt loop监听到音讯队列发生变化,就会把 timer2 放入到执行栈中去执行,这个时候对于调用栈来说就是开启了新一轮的执行,如果执行栈中的函数又开启了定时器,这个时候给后面的步骤是一样的,一直的去退出音讯队列,一直的去提取音讯队列中的函数来执行,直到调用栈和音讯队列中都没有须要执行的函数整体的代码就完结了,javascript 执行引擎就是先去执行调用栈中的工作,而后再通过事件循环从音讯队列中再取一个工作执行,顺次类推。咱们随时都能够往音讯队列放入工作,这些工作会排队执行。javascript异步实现原理外部就是通过音讯队列和工夫循环实现的

回调函数

所有异步编程计划根基都是回调函数,由调用者定义,交给执行者去执行的函数叫做回调函数

function foo (callback) {setTimeOut(() => {callback()
  }, 3000)
}

foo(() => {console.log("恰饭饭")
})

原文地址: https://kspf.xyz/archives/19
更多内容微信公众号搜寻 充饥的泡饭
小程序搜一搜 开水泡饭的博客

正文完
 0