3

好吧,我是 javascript 新手,听说它是单线程的。在我看来,如果您发出异步请求,它应该启动一个自己的线程来控制服务器是否已经响应。这在 Javascript 中不起作用。我在想是否有一些内置机制可以保存所有侦听器并调用它们,具体取决于他们“同意”的条件(onreadystatechange)。

这只是一个假设,我想我完全错了。好吧,也许有人可以在这里帮助我?

4

2 回答 2

4

如此处所述,只有 javascript 执行本身是单线程。然而,底层引擎可能会使用更多线程。

因此,HTTP 请求(在浏览器内部深处创建)可能有自己的线程,但是当某些事情(如响应)发生时,它会触发一个事件以排队到 JS 任务调度程序中。当前脚本执行结束后,onreadystatechange将立即调用该函数。

于 2012-07-27T12:06:40.880 回答
2

如您所知,XHR 对象对于所有浏览器都是不同的。例如 IE 使用 ActiveX,FF 使用 XMLHttpRequest 对象,...有一些努力通过引入XHR2 对象在 HTML5 中统一这一点,但仍未得到广泛支持。因此,这将针对每个浏览器以不同的方式实现。有些人可能使用线程,有些人可能使用其他东西。那不是纯javascript。当人们说 javascript 是单线程时,他们的意思是您不能在 javascript 中手动创建线程。但这并不意味着您不能进行异步编程。

于 2012-07-27T12:04:06.953 回答