【发布时间】:2010-12-17 00:09:08
【问题描述】:
以下代码遍历 6 个输入按钮,并为每个按钮附加一个onclick 事件,以提醒相应迭代的索引号:
for (var i = 1; i < 6; ++i) {
var but = document.getElementById('b_' + i);
(function (el) {
var num = i;
but.onclick = function () {
alert(num);
};
})(but);
}
如您所见,在每次迭代中都有一个自调用函数,该函数创建一个作用域来存储该作用域中的迭代索引。
我一直使用这种类型的模式来附加一个依赖于在迭代期间更改的变量的事件。
任何人都可以向我解释为什么上述工作,以及num 变量是如何在范围内捕获的?
另外,上面使用的自调用函数是否称为closure?
【问题讨论】:
-
是的,这肯定是一个闭包。
-
那里有一个闭包,当然。请注意,stackoverflow.com/questions/111102/… 的一些答案也回答了您的问题,尽管另一个问题不同。
-
就我而言,我不会称该匿名函数为“自调用”,这意味着“递归”。它是“立即调用”之类的。
-
可能匿名函数会调用
el.onclickisobut.conclick? -
@Skilldrick 防止语法错误
标签: javascript scope closures