

了解了原因,摸索出了很多解决办法(纯粹是兴趣)。最先想到的前两种
1、将变量 i 保存给在每个段落对象(p)上
代码如下:
function init1() {
var pAry = document.getElementsByTagName("p");
for( var i=0; i
pAry[i].onclick = function() {
alert(this.i);
}
}
}
2、将变量 i 保存在匿名函数自身
代码如下:
function init2() {
var pAry = document.getElementsByTagName("p");
for( var i=0; i
alert(arguments.callee.i);
}).i = i;
}
}
后又想到了三种
3、加一层闭包,i 以函数参数形式传递给内层函数
代码如下:
function init3() {
var pAry = document.getElementsByTagName("p");
for( var i=0; i
pAry[i].onclick = function() {
alert(arg);
};
})(i);//调用时参数
}
}
4、加一层闭包,i 以局部变量形式传递给内层函数
代码如下:
function init4() {
var pAry = document.getElementsByTagName("p");
for( var i=0; i
var temp = i;//调用时局部变量
pAry[i].onclick = function() {
alert(temp);
}
})();
}
}
5、加一层闭包,返回一个函数作为响应事件(注意与3的细微区别)
代码如下:
function init5() {
var pAry = document.getElementsByTagName("p");
for( var i=0; i
return function() {//返回一个函数
alert(arg);
}
}(i);
}
}
后又发现了两种
6、用Function实现,实际上每产生一个函数实例就会产生一个闭包
代码如下:
function init6() {
var pAry = document.getElementsByTagName("p");
for( var i=0; i
}
}
7、用Function实现,注意与6的区别
代码如下:
function init7() {
var pAry = document.getElementsByTagName("p");
for( var i=0; i
}
}
