1、将变量 i 保存给在每个段落对象(p)上
2 | var pAry = document.getElementsByTagName( "p" ); |
3 | for ( var i=0; i<pAry.length; i++ ) { |
5 | pAry[i].onclick = function () { |
2、将变量 i 保存在匿名函数自身
2 | var pAry = document.getElementsByTagName( "p" ); |
3 | for ( var i=0; i<pAry.length; i++ ) { |
4 | (pAry[i].onclick = function () { |
5 | alert(arguments.callee.i); |
后又想到了三种
3、加一层闭包,i 以函数参数形式传递给内层函数
02 | var pAry = document.getElementsByTagName( "p" ); |
03 | for ( var i=0; i<pAry.length; i++ ) { |
05 | pAry[i].onclick = function () { |
4、加一层闭包,i 以局部变量形式传递给内层函数
02 | var pAry = document.getElementsByTagName( "p" ); |
03 | for ( var i=0; i<pAry.length; i++ ) { |
06 | pAry[i].onclick = function () { |
5、加一层闭包,返回一个函数作为响应事件(注意与3的细微区别)
02 | var pAry = document.getElementsByTagName( "p" ); |
03 | for ( var i=0; i<pAry.length; i++ ) { |
04 | pAry[i].onclick = function (arg) { |
后又发现了两种
6、用Function实现,实际上每产生一个函数实例就会产生一个闭包
2 | var pAry = document.getElementsByTagName( "p" ); |
3 | for ( var i=0; i<pAry.length; i++ ) { |
4 | pAry[i].onclick = new Function( "alert(" + i + ");" ); |
7、用Function实现,注意与6的区别
2 | var pAry = document.getElementsByTagName( "p" ); |
3 | for ( var i=0; i<pAry.length; i++ ) { |
4 | pAry[i].onclick = Function( 'alert(' +i+ ')' ); |