2010-01-26 120 views
3

我有这样的代码:javascript中的全局变量?

$(".link").each(function() { 
      group += 1; 
      text += 1; 
      var links = []; 
      links[group] = []; 

      links[group][text] = $(this).val(); 
     } 
    }); 

    var jsonLinks = $.toJSON(links); 

它循环后每.LINK它将退出每个环和编码阵列“链接”到JSON。但数组'链接'是每个循环内的局部变量。我怎样才能让它成为循环之外的全球?

+0

可能欺骗(http://stackoverflow.com/questions/2138287/global-variable-in-javascript)? –

+1

你的问题出现了两次。最好删除这一个。 – kgiannakakis

回答

9

定义links外循环:

var links = []; 
$(".link").each(function() { 
    group += 1; 
    text += 1; 
    links[group] = []; 
    links[group][text] = $(this).val(); 
}); 
var jsonLinks = $.toJSON(links); 

我还要指出的是,这并没有做出很大的意义,因为你最终元件7,例如,与单个元素的数组(索引为7)的值。这真的是你想要的吗?我想你想要的是一个数组的数组。如果是这样,为什么不使用map()

var links = $(".link").map(function(i, val) { 
    return $(val).val(); 
}); 
+0

我不太了解地图功能。我阅读文档,但仍然没有得到它。你能解释一下发生了什么吗? '我'和'val'是什么?什么是回报意味着什么? – ajsie

+0

'map()'将一个函数应用于数组的每个元素。所以这个函数被调用了每个元素。无论结果数组中返回的函数是什么。回调的参数是i(数字匹配从0开始)和val(数组元素,它也是'this')。 – cletus

2

var links = []; 
$(".link").each(function() { 
     group += 1; 
     text += 1; 
     links[group] = []; 
     links[group][text] = $(this).val(); 
    } 
}); 

var jsonLinks = $.toJSON(links); 

或者干脆删除 '无功':

$(".link").each(function() { 
     group += 1; 
     text += 1; 
     links = []; 
     links[group] = []; 
     links[group][text] = $(this).val(); 
    } 
}); 

var jsonLinks = $.toJSON(links); 
2

您的代码块之前刚刚宣布它一个全局变量,你可以是

一个)定义一个函数的可变外部(如已经在其他的答案提及)

B)武官可变的窗口对象


$(".link").each(function() { 
      group += 1; 
      text += 1; 
      window.links = []; 
      links[group] = []; 

      links[group][text] = $(this).val(); 
     } 
    }); 

    var jsonLinks = $.toJSON(links); 

c) cr eate的变量,而不var关键字


$(".link").each(function() { 
      group += 1; 
      text += 1; 
      links = []; 
      links[group] = []; 

      links[group][text] = $(this).val(); 
     } 
    }); 

    var jsonLinks = $.toJSON(links); 

2

创建一个封闭:

{  
    var links = []; 
    $(".link").each(function() { 
      group += 1; 
      text += 1; 

      links[group] = []; 

      links[group][text] = $(this).val(); 
     } 
    }); 

    var jsonLinks = $.toJSON(links); 
} 
0

定义

var links = []; 

$(".link").each(function() { 
     group += 1; 
     text += 1;    
     links[group] = []; 

     links[group][text] = $(this).val(); 
    } 
}); 

var jsonLinks = $.toJSON(links); 
0

的JavaScript只能理解两个作用域

  1. 全球:这是任何变量函数外和变量声明没有VAR

  2. 功能:任何在函数内部的东西。

因此,我会建议你关闭方法如下

function getJSONLinks() 
{ 
     var links = []; 
     $(".link").each(function() { 
     group += 1; 
     text += 1; 
     links[group] = []; 
     links[group][text] = $(this).val(); 
     } 
    }); 
    return $.toJSON(links); 
}