【发布时间】:2012-11-16 23:39:15
【问题描述】:
可能重复:
Javascript closure inside loops - simple practical example
我有一个包含 4 个对象 (that.pairs) 的数组,每个对象都有一个 .t 属性,它是一个 jQuery 对象/元素。我正在尝试在每个被点击的t 上设置一个事件。
问题在于,当其中一个被点击时,总是最后一对(索引 3)被传递到我的 doToggle() 函数中。
为什么会这样?我该如何解决?
for (var i = 0; i < that.pairs.length; i++) {
var p = that.pairs[i];
p.t.click(function() {
that.doToggle(p);
});
}
【问题讨论】:
-
我认为这个问题不值得投反对票,它已经得到了很好的解释。我知道这已经被问了一百万次了,但是你怎么知道要搜索什么?
-
@JuanMendes:嗯,我不知道。这个问题被问了很多次,任何对问题的通用措辞都可能产生正确的答案。例如,“javascript 事件循环函数总是最后一对”“javascript 循环总是最后一项”“javascript 回调最后一个元素”“javascript 循环相同的值”——哎呀,甚至只是“javascript 循环问题”。在搜索中很难不找到答案。
-
@Chuck mmm... 我搜索了
Losing Scope of Array on Click Event Loop并且第三个结果是相关的...所以你确实有道理,但它并不像你声称的那么明显。如果他们对关闭一无所知,我仍然不确定 OP 是否能够弄清楚。我保留对严重问题的反对意见,例如不包含任何代码、不显示任何努力、不显示错误消息、说“它不起作用”......
标签: javascript jquery arrays for-loop dom-events