簡體   English   中英

Javascript:如何制作此變量。 全球工作

[英]Javascript: How to make this var. work globally

我有一個與此變量有關的問題,不想在函數外部工作,我只是不明白為什么! 這是代碼:

globalData = new Array();

 // 
 // Colors
 //
 if ( settings.category == 'colors' ) {
  $.getJSON(colorLoversURL, function(data) {
   for ( var i in data ) {
    var localData = data[i].hex;
    globalData.push(localData);
   }
  });
 }

 // 
 // Palettes
 //
 else if ( settings.category == 'palettes' ) {
  $.getJSON(colorLoversURL, function(data) {
   for ( var i in data ) {
    var localData = new Array();
    for ( var j in data[i].colors ) {
     localData.push(data[i].colors[j]);
    }
    globalData.push(localData);
   }
  });
 }

現在的事情是,globalData僅在我需要時將值保留在getJSON函數內和該函數之外,它只是空白(我在警報窗口中測試了這些值)。 我還嘗試過在代碼的前面和后面使用“ var”。 這里有什么問題嗎?

您何時檢查globalData?

兩次對getJSON的調用都使用回調操作globalData,因此在檢查globalData之前可能尚未調用該函數。 不要忘記您在那里使用異步javascript。

如果是這種情況,我建議使用函數鏈接

 function useGlobalData() {
    alert(globalData); 
    //do other stuff
 }
 // 
 // Palettes
 //

  $.getJSON(colorLoversURL, function(data) {
   for ( var i in data ) {
    var localData = new Array();
    for ( var j in data[i].colors ) {
     localData.push(data[i].colors[j]);
    }
    globalData.push(localData);
    useGlobalData();
   }
  });

如果在您的.js文件中,則第一行必須是var globalData = new Array();

或者如果它在<script type="text/javascript">...</script>那么您的下一行將是

var globalData = new Array();

例如

<script type="text/javascript">
   var globalData = new Array();
   //Rest of JS code...
   function whatever() {

   }
</script>

然后globalData變為全局。

這應該工作。 代碼是否有可能以某種方式運行兩次,從而導致globalData重置回空數組?

您在javascript閉包內部進行操作,在閉包內部您具有不同的作用域。

這意味着您只能訪問范圍內定義的內容。

簡單地說x = something()不會創建全局變量(可以從所有作用域訪問的變量)。

為此,您需要做var x = something();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM