【发布时间】:2011-01-23 21:52:00
【问题描述】:
我见过程序员使用计数器在循环内分配事件侦听器。我相信这是语法:
for(var i=0; i < someArray.length; i++){
someArray[i].onclick = (function(i){/* Some code using i */})(i);
}
谁能解释一下这背后的逻辑,以及这种奇怪的语法,我从未见过:
(function(i))(i);
非常感谢您的时间和耐心。
【问题讨论】:
-
这在技术上不涉及关闭。虽然我不完全确定它有什么好处;该内部函数将立即运行,除非它返回另一个函数,否则 onclick 将设置为非常奇怪的值。
-
@cHao 因为 this,立即匿名函数调用,被分配给 onlick,它必须返回一个函数,所以返回的函数是一个在周围环境中带有“i”变量的闭包。
-
@jcubic:如果代码确实设置了 DOM 事件处理程序,它必须返回一个函数如果它工作正常。这里没有足够的代码来证明任何一个假设。
标签: javascript function loops closures