Geo*_*e B 8 javascript jquery closures
可能重复:
JavaScript闭包如何工作?
我已经阅读了相同的旧javascript闭包循环问题的所有百万重复.我以为我理解它们,并且直到今天一直使用闭包几个月而没有问题.我很难过.
for (var i in groups){
for(var j in groups[i]){
$(unique_form).die('submit').live('submit'), function{
function (groups2, i2, j2){
return function(){alert(groups2[i2][j2])}
}(groups, i, j)
}
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我提交每个独特的表单时 - 我不断收到组[i] [j]的最后一个元素的警报.显然,我做了一些蠢事,这是什么?我认为通过创建匿名函数groups2,i2和j2,我正在解决这个问题.
传递的函数在触发submit事件时.live()执行.到了那个时候,和将其最终值.您需要在事件处理程序之外创建闭包:ij
(function (i2, j2) {
$(unique_form).die('submit').live('submit', function{
alert(groups[i2][j2])
});
}(i, j));
Run Code Online (Sandbox Code Playgroud)
请注意,我已从groups匿名函数中删除了参数.没有必要关闭它,因为它的价值不会改变.我还将整个函数表达式包装在括号中,这是约定(在这种情况下实际上是必需的,强制它被解析为表达式).
另请注意,我已经删除了.live()问题中第一个参数后的右括号.它应该不存在.
旁注.
.live()并且.die()已经被弃用多年了.使用.on()(使用jQuery 1.7+)或.delegate()(使用旧版本).
| 归档时间: |
|
| 查看次数: |
266 次 |
| 最近记录: |