我的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查看: -
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++
值..
我尝试了一些东西,但它不起作用?
怀疑: -
函数中的函数不是JavaScript中的Closure吗?
我正在使用的示例是JavaScript Closure示例??
谢谢!
答案 0 :(得分:4)
你真的很亲密;你只是忘了设置并使用该匿名函数的参数:
li.onclick = (function (i) {
return (function (){
alert(i);
})
})(i);
立即执行的函数的重点是给每个处理程序一个循环变量的私有副本,所以你必须实际将它作为一个参数传递给它。
答案 1 :(得分:2)
你是否需要关闭。
你必须将i
保留在函数体创建的闭包内:
li.onclick = (function (){
var localI = i;
return (function (){
alert(localI);
})
})();