JavaScript的异步实现机制
PHP中文网
PHP中文网 2017-04-10 14:48:36
[JavaScript讨论组]

大家用言简意赅的语言,讲讲JavaScript的异步实现机制。
参考帮助:http://www.cnblogs.com/sprying/archive/2013/05/26/3100639.html

PHP中文网
PHP中文网

认证0级讲师

全部回复(2)
高洛峰

js能异步是因为它用能调用的模块是异步的。

js永远都是单线程的。(当然,如果你非要说work),而且只有一个事件队列(你也可以理解成任务队列)
他之所以异步是是因为 某些的模块是异步的。
举个栗子,ajax
当你发送一个异步网络请求后,js的主线程不会一直等待这个请求返回,而是执行事件队列里下一个事件。
请注意,js并没有实现如何发送网络请求,js只是调用了某个能发送网络请求的模块,而这个模块是通过c++或其他语言实现。然后这个模块在等待请求的结果,当得到响应后,便把响应成功这个事件添加到js的事件队列的队尾。
你看,网络请求发送的同时,js依然在执行,这显然是异步的。

PHP中文网

这篇文章的重点就是这一句了:

我们必须清楚一点,触发和执行并不是同一概念,计时器的回调函数一定会在指定delay的时间后被触发,但并不一定立即执行,可能需要等待。所有JavaScript代码是在一个线程里执行的,像鼠标点击和计时器之类的事件只有在JS单线程空闲时才执行。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号