如何在JavaScript中复制变量?

我有这个JavaScript代码:

for (var idx in data) { var row = $(""); row.click(function() { alert(idx); }); table.append(row); } 

所以我正在查看一个数组,动态创建行(我创建单元格的部分被省略,因为它并不重要)。 重要的是我创建了一个包含idx变量的新函数。

但是,idx只是一个引用,因此在循环结束时,所有行都具有相同的function,并且所有行都提醒相同的值。

我现在解决这个问题的一种方法是这样做:

 function GetRowClickFunction(idx){ return function() { alert(idx); } } 

在我调用的调用代码中

 row.click(GetRowClickFunction(idx)); 

这有效,但有点难看。 我想知道是否有更好的方法可以在循环中复制idx的当前值?

虽然问题本身不是特定于jQuery(它与JavaScript闭包/范围有关),但我使用jQuery,因此只有jQuery解决方案才有效。

你可以将函数放在循环中:

 for (var idx in data) { (function(idx) { var row = $(""); row.click(function() { alert(idx); }); table.append(row); })(idx); } 

现在,我想给你的真正建议是停止像这样的事件绑定,并开始使用jQuery“live”或“delegate”API。 这样,您可以为表中的所有行设置单个处理程序。 为每一行提供“idx”值作为“id”或“class”元素或其他东西,以便您可以在处理程序中将其拉出来。 (或者我猜你可以把它存放在“数据”expando中。)

查看jquery的data()方法:

http://api.jquery.com/jQuery.data/

描述:存储与指定元素关联的任意数据。