Javascript 对点击事件的关闭疑惑

标签 javascript html closures

我的 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/

相关文章:

c# - ASP.NET 和 jQuery 日历 - 不起作用

php - Laravel 多对多关系插入

javascript - 使用JavaScript多次单击按钮时无法带上div

javascript - 如何从另一个函数返回一个函数然后调用它?

javascript - 当数组内的可观察值之一发生更改时,更新父 knockout 可观察值数组项

javascript - 删除 'complicated' 重复项

javascript - 如何从其他 JavaScript 函数调用 Jquery 函数

javascript - 将数组作为参数传递给 SetTimeout 回调

javascript - 获取输入字段的值,并用它们进行一些计算

javascript - 这两个javascript函数有什么区别?