有的人对「异步」这个概念产生了误解,认为异步是同时做两件事,其实不是的,因为JS引擎根本就没有能力同时做两件事。
就拿setTimeout
来说,setTimeout
里的代码一定会在当前环境中的任务执行完了「之后」才执行。
「异步」只是说不用等待任务结束,并没有说强制要求两个任务「同时」进行。
但我们有时候会在一些实际代码中发现,AJAX 请求似乎是和 JS 代码同时进行的。
这是因为,这个 AJAX 请求并不是由「JS 引擎」负责,而是由浏览器的网络模块负责。
我以前刚开始学习js的时候一直以为异步就是同时做两件事,也是后来才知道,原来 AJAX 请求是由浏览器的网络请求模块负责的。。。
很多人会说,JavaScript很简单。其实,JS 里面的难点还是不少的,建议好好阅读《JavaScript高级程序设计》这本书,好好打基础。