解决方案 »

  1.   

    <script type="text/javascript">       
          
    function init() {       
        var pAry = document.getElementsByTagName("p");       
        for( var i=0; i<pAry.length; i++ ) {       
             pAry[i].onclick = function(i) {  
     return function(){
             alert(i);       }
        }   (i);
      }       
    }       
    </script>       
    </head>       
    <body onLoad="init();">       
    <p>产品一</p>       
    <p>产品二</p>       
    <p>产品三</p>       
    <p>产品四</p>       
    <p>产品五</p>       
    </body>       
    要用到闭包
      

  2.   

    你在init方法里定义i 那么i的作用域就在init方法
     因此当你绑定事件之后,用到的i都是init方法里的,所以是执行到最后的结果function里套function 就能形成所谓闭包,至少我是这样理解,关于闭包的争议还是有些大。
    不过你只要理解变量作用域就好,里面function会形成一个作用域,你传进去的值就跟外面没有关系了。
      

  3.   

    <script type="text/javascript">       
          
    function init() {       
        var pAry = document.getElementsByTagName("p");    
        for( var i=0; i<pAry.length; i++ ) {   
    with({i:i}){    
             pAry[i].onclick = function() {  
             alert(i);     
        }   
      }   
       }   
    }       
    </script>       
    </head>       
    <body onLoad="init();">       
    <p>产品一</p>       
    <p>产品二</p>       
    <p>产品三</p>       
    <p>产品四</p>       
    <p>产品五</p>       
    </body>       
    with解决办法。