【发布时间】:2011-09-09 03:12:19
【问题描述】:
考虑一下 JavaScript 的这个小 sn-p:
for(var i in map.maps)
{
buttons.push($("<button>").html(i).click(function() { alert(i); }));
}
它为map.maps 对象(它是一个关联数组)中的每个字段创建一个按钮。我将索引设置为按钮的文本,并将其设置为提醒索引。显然,人们希望所有按钮在单击时都会提醒它自己的文本,但所有按钮都会在单击时提醒 map.maps 对象中的 final 索引的文本。
我认为这种行为是由 JavaScript 处理闭包的简洁方式引起的,从创建它们的闭包返回并执行函数。
我能想象解决这个问题的唯一方法是将索引设置为按钮对象上的数据并从点击回调中使用它。我也可以在我的buttons 对象中模仿map.maps 索引,并使用indexOf 在点击时找到正确的索引,但我更喜欢前一种方法。
我在答案中寻找的是确认我正在以正确的方式做事,或者是关于我应该如何应该做的建议。
【问题讨论】:
标签: javascript jquery function closures