我的 JS 代码:-
var ul = document.createElement("ul");
for(var i=0; i<10; i++){
var li= document.createElement("li");
li.innerHTML='this is my li '+ i+ '.';
li.onclick = (function (){
return (function (){
alert(i);
})
})();
ul.appendChild(li);
}
document.body.appendChild(ul);
测试代码-- http://jsfiddle.net/VhfEh/112/
HTML View :-
this is my li 0.
this is my li 1.
this is my li 2.
this is my li 3.
this is my li 4.
this is my li 5.
this is my li 6.
this is my li 7.
this is my li 8.
this is my li 9.
当我点击任何 li
时,我得到 10.. 这是 i
的最大值或者是 i++
值(value)..
我尝试了一些方法但它不起作用??
疑问:-
Function with in a function 不是 JavaScript 中的 Closure 吗?
我使用的示例是 JavaScript Closure 示例 ??
谢谢!!
最佳答案
你真的很接近;您只是忘记了设置和使用带有该匿名函数的参数:
li.onclick = (function (i) {
return (function (){
alert(i);
})
})(i);
立即执行函数的全部意义在于为每个处理程序提供循环变量的私有(private)副本,因此您必须像那样将其实际作为参数传递。
关于Javascript 对点击事件的关闭疑惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19303152/