Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当javascript是单线程时,谁是onreadystatechange的调用者?_Javascript_Ajax - Fatal编程技术网

当javascript是单线程时,谁是onreadystatechange的调用者?

当javascript是单线程时,谁是onreadystatechange的调用者?,javascript,ajax,Javascript,Ajax,嗯,我是javascript新手,听说它是单线程的。在我看来,如果发出异步请求,它应该启动自己的线程,控制服务器是否已经响应。这在Javascript中不起作用。我在想是否有某种内置机制可以保存所有侦听器并调用它们,这取决于它们“同意”的条件(onreadystatechange) 这只是一个假设,我想我完全错了。嗯,也许有人能帮我一下?正如您所知,XHR对象对于所有浏览器都是不同的。例如IE使用ActiveX,FF使用XMLHttpRequest对象。。。在HTML5中,有一些努力通过引入的来

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


这只是一个假设,我想我完全错了。嗯,也许有人能帮我一下?

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

正如前面所解释的,只有javascript执行本身是单线程的。然而,底层引擎可能会使用更多线程

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