如下的html,为什么每次输出都是5,而不是点击每个p,就alert出对应的1,2,3,4,5
2、将变量 i 保存在匿名函数自身
<span style="font-family:Microsoft YaHei;"><html >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>闭包演示</title>
<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 οnlοad="init();">
<p>产品一</p>
<p>产品二</p>
<p>产品三</p>
<p>产品四</p>
<p>产品五</p>
</body>
</html> </span>
解决方式有两种,
1、将变量 i 保存给在每个段落对象(p)上
<span style="font-family:Microsoft YaHei;"> function init() {
var pAry = document.getElementsByTagName("p");
for( var i=0; i<pAry.length; i++ ) {
pAry[i].i = i;
pAry[i].onclick = function() {
alert(this.i);
}
}
} </span>
2、将变量 i 保存在匿名函数自身
<span style="font-family:Microsoft YaHei;"> function init2() {
var pAry = document.getElementsByTagName("p");
for( var i=0; i<pAry.length; i++ ) {
(pAry[i].onclick = function() {
alert(arguments.callee.i);
}).i = i;
}
} </span>