为什么结果都是5

why the results are all 5?

本文关键字:结果 为什么      更新时间:2023-09-26

可能重复:
JavaScript闭包是如何工作的?

<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?我希望结果是(0,1,2….)。

创建该函数时,它引用的是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);
    }
}