我见过程序员使用计数器在循环内分配事件侦听器。我相信这是语法:
for(var i=0; i < someArray.length; i++){
someArray[i].onclick = (function(i){/* Some code using i */})(i);
}
有人可以解释一下这背后的逻辑,以及这种奇怪的语法,我从未见过这个:
(function(i))(i);
非常感谢您的时间和耐心。
The (function(i))(i)
语法创建一个匿名函数,然后立即执行它。
通常,您将在每次循环时创建一个新函数,该函数具有自己的变量副本,而不是每个事件处理程序共享相同的变量。
例如:
for(int i = 0; i < 10; i++)
buttons[i].click = function() { doFoo(i); };
经常让人们出局,因为无论你点击哪个按钮,doFoo(10)
叫做。
Whereas:
for(int i = 0; i < 10; i++)
buttons[i].click = (function(i){ return function() { doFoo(i); };)(i);
创建内部函数的一个新实例(其自身值为i
)对于每次迭代,并且按预期工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)