代码如下,应该是闭包的缘故,但还是比较含混,希望有人帮我解释一下。
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<title>test</title>
<style type="text/css">
    p {background:gold;}
</style>
<script type="text/javascript"> 
function init() {    
    var pAry = document.getElementsByTagName("p");    
    for( var i=0; i<pAry.length; i++ ) {    
        pAry[i].onclick = function() {  
alert(i);    

}
}</script> 
</head> 
<body onload="init();"> 
<p>p0</p> 
<p>p1</p> 
<p>p2</p> 
<p>p3</p> 
<p>p4</p> 
</body> 
</html> 

解决方案 »

  1.   


    <!DOCTYPE HTML>
    <html>
    <head>
    <meta charset="utf-8" />
    <title>test</title>
    <style type="text/css">
        p {background:gold;}
    </style>
    <script type="text/javascript"> 
    function init() {    
        var pAry = document.getElementsByTagName("p");    
        for( var i=0; i<pAry.length; i++ ) {
    (function(i){
    pAry[i].onclick = function() {  
    alert(i);    

    })(i)    }
    }</script> 
    </head> 
    <body onload="init();"> 
    <p>p0</p> 
    <p>p1</p> 
    <p>p2</p> 
    <p>p3</p> 
    <p>p4</p> 
    </body> 
    </html> 
    典型的问题。参考下
      

  2.   

    楼上达人啊,代码
    (function(i){
                pAry[i].onclick = function() {  
                    alert(i);    
                }             
            })(i)里面,括号放在放在function外面是什么写法啊?后面(i)又是什么写法? 能否解释一下?
      

  3.   

    楼主 就是 闭包的问题(function(x){
      
    })(i)i是实参,x是形参。
    搜下 js闭包 一大堆解释。