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+ ')' );
|