2013-10-10 54 views
4

我的JS代码: -的Javascript关闭疑虑点击事件

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?

  • 我正在使用的示例是JavaScript Closure示例?

谢谢!!

回答

4

你真的很接近;你忘记了设置和使用参数与匿名函数:

li.onclick = (function (i) { 
    return (function(){ 
     alert(i); 
    }) 
})(i); 

的立即执行的函数的整点是给每个处理器循环变量的专用副本,所以你必须真正传递它作为一个参数。

+0

感谢这个代码工作:) –

+0

例子中,我使用的是JavaScript的闭包的例子? –

+0

我的一位同事告诉我在函数定义中的函数不是JavaScript中的闭包?你能否让我明确这个概念..? –

2

你是对的需要关闭。

你必须保持i的地方,是由函数体中创建的闭包:

li.onclick = (function(){ 
    var localI = i; 
    return (function(){ 
     alert(localI); 
    }) 
})(); 
+0

感谢此代码正在工作。 +1 –