2011-08-07 174 views
1

我對Javascript中的變量作用域感到困惑。我正在嘗試使用Prototype庫加載數據文件(.json),並使用json-sans-eval解析響應文本。問題是,在我看來,如果我試圖訪問Ajax.Request範圍之外的「dataObj」,數據文件中的內容就會丟失。Javascript可變範圍問題

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 
} 
+5

這不是範圍,問題是_A_jax是_A_synchronous,第二個'console.log'正在執行*在請求完成之前... – CMS

回答

6

console.log(...)在立即OnLoadHandle運行結束第二次調用,而內部的請求完成後,才onSuccess運行的一個。第二個console.log沒有任何用處。

更廣泛地說,這意味着將dataObj作爲全局變量沒有意義。它僅在onSuccess中分配後纔有用,因此應該在onSuccess範圍內作爲局部變量。如果你在其他地方需要它,onSuccess應該將它作爲參數傳遞給其他函數。

+0

謝謝你的回答。 – Unagi