2 victor fly victor_fly 于 2016.04.03 11:48 提问

javascript异步编程和单线程之间的一些疑惑

这两天在研究js异步编程机制,查阅了很多资料,中文的英文的都有。大致上对js异步实现有些了解。但有几点不太理解。

第一个问题:

有一点无论是国内的资料还是英文的,都没有讲到到(可能是过于基础,本人是业余前端,对线程这一块不是很了解)。我们说javascript是单线程,即一次只能执行一个任务,前一个任务结束,后一个才会执行。这是从抽象后的javascript的语言层面说的,还是指各种编译环境内部本来就是单线程?

比如当Thread Pool里注册了各种事件,当有事件触发,就会将callback function 移至Event Queue,这一过程需要不断监听,是需要线程的吧?但此时Event loop本身就在不断监听执行栈和Event Queue,这又是一条线程。可能表述不清,我的意思是事件被触发,并且传递给事件列队和Event Loop不断监听并执行消息列队里的函数并不是同一线程完成的吗?或者事件是编译器底层通过另一个线程来监听,然后再传递给js线程?

第二个问题:

在阮一峰老师博客(链接描述)中写因为js异步执行,以下两段代码等价

var req = new XMLHttpRequest();
req.open('GET', url);

req.onload = function (){};

req.onerror = function (){};

req.send();
var req = new XMLHttpRequest();
req.open('GET', url);
req.send();
req.onload = function (){};

req.onerror = function (){};
但另一位专业js老师(链接描述)指出有错误【这个调用其实有个默认回调函数,Ajax结束后,执行回调函数,回调函数检查状态,决定调用onload还是onerror。所以只要在回调函数执行之前设置这两个属性就行】具体批注不太懂,请问是如何理解的呢?

1个回答

CSDNXIAOD
CSDNXIAOD   2016.04.03 11:52
已采纳

javascript单线程 异步
JavaScript是如何做到单线程异步的
为什么javascript是单线程的却能让AJAX异步调用?
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

victor_fly
victor_fly 虽然是个机器人,感谢,链接正好解答了我的疑问(看来搜搜关键词要准确)
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!