2012-07-27 46 views
3

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

这只是一个假设,我想我完全错了。那么,也许有人可以帮助我吗?

回答

4

只有javascript执行本身是单线程的,如解释here。然而,底层引擎可能会使用更多的线程。因此,HTTP请求(创建在浏览器深处的某个地方)可能有自己的线程,但是当发生某种事情(如响应)时,它会触发事件排入JS任务调度器。一旦当前脚本执行结束,将调用onreadystatechange函数。

2

如您所知,XHR对象对于所有浏览器都不相同。例如,IE使用ActiveX,FF使用XMLHttpRequest对象......有一些努力通过引入XHR2 object来统一HTML5,但它仍然没有得到广泛的支持。所以这对每个浏览器都会有不同的实现。有些人可能使用线程,其他人可能使用其他线程这不是纯粹的JavaScript。当人们说javascript是单线程时,它们意味着你不能在javascript中手动创建线程。但这并不意味着你不能进行异步编程。