为什么结果都是5?

时间:2011-06-25 07:17:44

标签: javascript

  

可能重复:
  How do JavaScript closures work?

<script type="text/javascript"> 
function init() {    
    var pArry = document.getElementsByTagName("p");    
    for( var i=0; i<pAry.length; i++ ) {    
         pArry[i].onclick = function() {    
         alert(i);    
    } 
  }
}
</script> 
</head> 
<body onload="init();"> 
<p>test 0</p> 
<p>test 1</p> 
<p>test2</p> 
<p>test3</p> 
<p>test4</p> 

为什么结果都是5?我希望reault是(0,1,2 ....)。

1 个答案:

答案 0 :(得分:1)

创建该函数时,它引用i,而不是i的值。试试这个来冻结i的价值:

function init() {    
    var pArray = document.getElementsByTagName("p");    
    for( var i=0; i<pAry.length; i++ ) {    
        (function(i) {
            pArray[i].onclick = function() {    
                alert(i);    
            };
        })(i);
    }
}