Javascript变量范围问题

时间:2011-08-07 01:09:34

标签: javascript json

我对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 
}

1 个答案:

答案 0 :(得分:6)

console.log(...)结束时OnLoadHandle的第二次调用立即运行,而onSuccess内的console.log仅在请求完成后运行。第二个dataObj没有用处。

更广泛地说,这意味着将onSuccess作为全局变量毫无意义。它仅在onSuccess中分配后才有用,因此应该作为onSuccess中的局部变量。如果您在其他地方需要它,{{1}}应该将它作为参数传递给其他函数。