我知道,很好的标题;-)
无论如何,假设我有以下代码(我这样做):
function GetArray(i) {
if (i == 0) {
return [1, 2, 3];
}
return [];
}
for (var i = 0; i < 3; i++) {
var array = GetArray(i);
var onClick = function() {
alert(array.length);
}
var html = "<a>click me</a><br/>";
var element = $(html);
$("div").append(element);
element.click(onClick);
}
单击 3 个链接,并注意每个值为 0 的警报。
我想要的是第一个链接在点击时提醒 3。
现在,在你们都开始大喊为什么会发生这种情况之前,我知道 onClick 函数正在使用对同一数组实例的引用进行清除,因此循环的每次迭代都会“更改”数组,而不是创建一个新的,这就是为什么实际上最后一个数组值用于所有点击事件。
所以问题是,我能做些什么来完成这项工作?
我想尝试在函数内部“克隆”不起作用的数组(我使用过.slice(0)
)并且可能正确地不起作用。另外,我猜它甚至可能只是完全相同的功能被用于所有 3 个事件。