关于event loop的一些疑惑

新手上路,请多包涵

以下这段代码按照事件循环机制,不应该是先打印出‘heap over'再打印xhr.readyState最后打印responseText吗,为什么最终结果是先打印了xhr.readyState的状态码1再打印’heap over',再继续打印readyState的其他状态码,onreadystatechenge到底是同步还是异步?当我把open方法放到onreadystate之前又先打印‘heap over’,有点搞不懂

var xhr = new XMLHttpRequest();

    xhr.onreadystatechange = function() {

            console.log(xhr.readyState)

                if(xhr.readyState == 4 && xhr.status == 200){

                    console.log(xhr.responseText);

                }

            }



xhr.open("GET",'data.txt',true); 

    xhr.send(null);



    for(var i = 0; i < 1000000000; i ++) {}

    console.log('heap over')
阅读 1.4k
2 个回答

你得先了解一下, readystate的状态
open在前, 调用的时候, onreadystatechange还未设置,所以状态1的时候不会被打印出来
在后,调用的时候, onreadystatechange已设置,所以状态1的时候会被打印出来,然后才是 heap over

调用xhr.open("GET",'data.txt',true); 的时候会改变readyState,所以先触发了一次onreadystatechange

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题