为什么我的代码不会附加到循环中的字符串?

时间:2009-09-16 21:34:03

标签: javascript jquery arrays loops

我正在使用jQuery,通过循环构建表。我认为最好的方法是创建一个数组,然后执行$(blah).html(table);

var settings_table = '<open the table>';
  $.each(settings, function(i, val){
    var settings_table = settings_table+'<put stuff in it>';
  });
  var settings_table = settings_table+'<close it>';
  $('#rscc_opts').html(settings_table);

但这不起作用。我假设我做错了。或者你能建议一个更好的解决方案?我的数组形成如下:

var settings = [
  {
    var1: 'foo',
    var2: 'foo',
  },
  {
    var1: 'foo',
    var2: 'foo',
  }
];

2 个答案:

答案 0 :(得分:5)

这里的主要问题。

每当您说“var settings_table”时,您都会隐藏变量。除了settings_table的第一个声明外,除去“var”关键字。

答案 1 :(得分:0)

扩展iftrue的答案:

第一次声明变量时,如果指定“var”,则说明它是一个全局变量。

如果使用“var”关键字,则该变量将“限定”为该特定函数。这意味着它的数据只能由该函数内的代码访问。这意味着该函数之外的任何内容都无法访问该变量。另一个函数可以定义具有相同名称的相同变量,并且它可以存储完全不同的值。

$.each(settings, function(i, val){
  var settings_table = settings_table+'<put stuff in it>';
});

这里的技巧是你要定义一个新的匿名函数供迭代器使用。此函数具有自己的范围(它自己的个人数据)。这意味着通过声明“var settings_table”,您说“创建一个全新的变量,特定于此功能”。所以,你实际上做的是将表数据分配给一个全新的变量,然后在循环的下一次迭代中丢失数据。如果我们将其重写为:

,这可能会更清楚
function BuildTable(i, val){
  var settings_table = settings_table+'<put stuff in it>';
}

$.each(settings, BuildTable);

你真正想要做的事情可能有点棘手,它被称为“封闭”。闭包是一个高级的JavaScript主题。但是,在本质上,你所做的是说“嘿,我想让这个匿名函数可以访问我的个人数据”

在您的情况下,您想要做的是:

var settings_table = '<open the table>';
$.each(settings, function(i, val){
  settings_table = settings_table+'<put stuff in it>';
});

settings_table = settings_table+'<close it>';
$('#rscc_opts').html(settings_table);