课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
JavaScript编程技术的学习是大多数软件开发程序员都需要熟练掌握的一个编程技术,而本文我们就通过案例分析来简单了解一下,JavaScript异步编程实现方法。
JS是单线程
JavaScript语言的一大特点是单线程,同一时间只能做一件事
(单线程的JS就是一个傻子,脑子一根筋,做着当前的这件事情,没有完成之前,绝对不会做下一件事情)
当然,这是由其诞生的初衷所决定的——处理页面中用户的交互,以及操作DOM
用户不可能同时进行两个操作,边添加边删除
当然会出现一个问题:所有的任务需要排队,前一个结束,才会执行下一个(要是前面有人很磨蹭,后面的人需要等很久),造成页面渲染的不连贯
同步和异步
问题总有解决方案,利用多核CPU的计算能力,HTML5提出了WebWorker标准,允许JS脚本创建多个线程,于是JS出现了——同步和异步
同步:前一个任务结束执行下一个任务,任务的执行顺序和任务的排列顺序是一致的
异步:在执行某一任务(要花费很长时间)的同时,可以执行其他任务
所以上面那个代码结果是什么呢?
知道同步和异步是什么之后,我们要学习——同步任务和异步任务:
同步任务(synchronous)(非耗时任务):同步任务都在主线程上执行,形成一个执行栈
异步任务(asynchronous)(耗时任务):JS的异步任务都是通过回调函数实现的,如:
普通事件:click、resize等
资源加载:load、error等
定时器:setInterval、setTimeout等
JS执行机制
从内存角度理解不难发现,同步任务和异步任务根本身处两个区域,当执行任务时:
先执行执行栈中的同步任务
异步任务(回调函数)放入任务队列中
执行完所有的同步任务,就会一次读取任务队列中的异步任务,结束等待,进入执行栈开始执行
宏任务和微任务
JavaScript把异步任务又做了进一步划分——宏任务和微任务
宏任务(macrotask):
异步Ajax请求
setTimeout、setInterval
文件操作
其他宏任务
每一个宏任务执行完成之后,都会检查是否存在待执行的微任务,如果有,则执行完所有的微任务,再继续执行下一个宏任务
使用回调函数只是JavaScript的异步编程发展的一个阶段,也只是异步解决方案的其中一种
可以说JavaScript的异步编程发展经过了四个阶段:
回调函数、发布订阅
Promise
co自执行的Generator函数
async/await
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加抖音达内三江区域学习了解。