【发布时间】:2015-02-18 12:28:07
【问题描述】:
我更像是一名 C++/Java 程序员,并且对 Javascript 相当陌生。我一直在阅读 Javascript 的好书。在关于函数的章节中,作者引用了通过执行以下操作将事件侦听器附加到 DOM 中的节点的示例
// When you click on a node, an alert box will display the ordinal of the node.
1 var add_the_handlers = function (nodes) {
2 var i;
3 for (i = 0; i < nodes.length; i += 1) {
4 nodes[i].onclick = function (i) {
5 return function (e) {
6 alert(e);
7 };
8 }(i);
9
10 };
上述函数的目的是为 DOM 中的所有节点添加一个 onclick 事件处理程序,这样当任何一个节点被点击时,它都会提醒分配给它的数字或其序数。
我无法理解第 5 行到第 8 行。我知道函数(onclick = function(i)...)会立即以 i 作为参数调用。但是这个 'i' 是如何传递给正在返回的函数的呢? 'e' 是如何获得稍后被警告的 'i' 的值的?
我尝试使用它并在我的浏览器中运行以下代码
window.onclick = function(i){
return function(e){
console.log("Inner function called");
alert(e);
}
}(4);
我希望出现一个带有数字 4 的警报窗口。相反,警报窗口显示 [object MouseEvent]。
如果有人向我解释这一点,我将不胜感激。 谢谢
【问题讨论】:
标签: javascript function window closures