我对Javascript中的变量范围感到困惑。我正在尝试使用Prototype库加载数据文件(.json)并使用json-sans-eval解析响应文本。问题是在我看来,如果我试图访问Ajax.Request范围之外的“dataObj”,那么数据文件中的内容就会丢失。
Javascript中的变量具有引用计数。我不明白全局变量'dataObj'如何丢失其数据。任何暗示或帮助?
谢谢!
var dataObj;
function OnLoadHandle() {
new Ajax.Request('data.json',
{
method:'get',
onSuccess: function(transport)
{
var response = transport.responseText || "no response text";
dataObj = jsonParse(response);
console.log(dataObj["[0,0]"]); // OK
},
onFailure: function(){ alert('Something went wrong...') }
});
console.log(dataObj["[0,0]"]); // ERROR
}
答案 0 :(得分:6)
console.log(...)
结束时OnLoadHandle
的第二次调用立即运行,而onSuccess
内的console.log
仅在请求完成后运行。第二个dataObj
没有用处。
更广泛地说,这意味着将onSuccess
作为全局变量毫无意义。它仅在onSuccess
中分配后才有用,因此应该作为onSuccess
中的局部变量。如果您在其他地方需要它,{{1}}应该将它作为参数传递给其他函数。