<script language="JavaScript">
  window.onload=function(){
     for(var i=1; i <4 ; i++){
        var id = document.getElementById("a" + i);
           id.onclick = function(){
             alert(i);//为什么这里总是显示是4
           }
     }
  }
</script>
<h1>javascript闭包</h1>
<ul>
  <li id="a1">aa</li>
  <li id="a2">aa</li>
  <li id="a3">aa</li>
</ul>

解决方案 »

  1.   

    你这代码不算onload事件,根本就没有用到闭包。
    闭包要这样用
    <script language="JavaScript">
      window.onload=function(){
         for(var i=1; i <4 ; i++){
            var id = document.getElementById("a" + i);
            (function(i){
               id.onclick = function(){
                 alert(i);
               }
            })(i);
         }
      }
    </script>
    <h1>javascript闭包</h1>
    <ul>
      <li id="a1">aa</li>
      <li id="a2">aa</li>
      <li id="a3">aa</li>
    </ul> 
      

  2.   

    因为没闭包,那个循环在点击之前就循环完毕了i的值被固定为4
    ——————
    window.onload当整个页面加载完毕的时候调用onload
      

  3.   

    for(var i=1; i <4 ; i++)
    这个循环
    当i=3时,循环到了最后一次
    然后在结束之前
    i又加了1
    到底4后,退出循环
    然后你就点击,所以结果永远为4