Javascript范围变量

时间:2017-11-01 09:04:28

标签: javascript angularjs xmlhttprequest

var preGameRequest = new XMLHttpRequest();
var preGameData;

preGameRequest.open("GET", "/matches/live.json");
preGameRequest.onload = function() {
    preGameData = JSON.parse(preGameRequest.responseText);
}
preGameRequest.send();
console.log(preGameData);   // main problem is here

这是我的代码。我将preGameData定义为全局,并尝试将/matches/live.json文件的数据保存到preGameData中。当我从范围之外尝试console.log(preGameData)时(比如在代码部分中),我将'undefined'作为返回。如果我尝试从作用域内部调试console.log(preGameData)。我真的不知道发生了什么。

1 个答案:

答案 0 :(得分:0)

该代码应该有效:



preGameRequest.onload = function() {
    preGameData = JSON.parse(preGameRequest.responseText);
    console.log(preGameData);
}




原因: preGameRequest.send()函数异步操作

当浏览器尝试执行console.log()时(在您的示例中),尚未收到http响应,并且该变量实际上是 undefined

但是如果你把console.log()放在处理程序里面(就像在我的例子中那样),它会在响应已经收到时直接执行(直接在onload()处理程序中)。这就是为什么变量preGameData已经被定义的原因。