Javascript:如何制作这个var。全球工作

时间:2010-02-25 22:36:37

标签: javascript jquery variables

我遇到这个变量的问题,不想在函数外工作,我只是不明白为什么!这是代码:

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'。这里有什么问题吗?

4 个答案:

答案 0 :(得分:5)

您何时检查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();
   }
  });

答案 1 :(得分:0)

如果它在你的.js文件上,则第一行必须是。{ var globalData = new Array();

或者如果它在<script type="text/javascript">...</script>内,那么你的下一行将是

var globalData = new Array();

E.g。

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

   }
</script>

然后globalData变得全球化。

答案 2 :(得分:0)

这应该有效。是否有可能代码以某种方式运行两次,导致globalData重置为空数组?

答案 3 :(得分:-1)

您正在javascript闭包内操作,并且在闭包内部有一个不同的范围。

这意味着您只能访问范围内定义的内容。

简单地说x = something()不会创建一个全局(一个可以从所有范围访问的变量)。

要做到这一点,你需要做var x = something();