Js for循环输出i

1. 加一层闭包,i以函数参数形式传递给内层函数

 for( var i=0; i<ps.length; i++ ) {  
 (function(arg){   
  ps[i].onclick = function() {   
   alert(arg);  
  };  
 })(i);//调用时参数  
 } 

2. 加一层闭包,i以局部变量形式传递给内存函数

 for( var i=0; i<ps.length; i++ ) {  
 (function () {  
  var temp = i;//调用时局部变量  
  ps[i].onclick = function() {  
  alert(temp);  
  }  
 })();  
 }

3. 加一层闭包,返回一个函数作为响应事件(注意与3的细微区别)

 for( var i=0; i<ps.length; i++ ) {  
 ps[i].onclick = function(arg) {  
  return function() {//返回一个函数  
  alert(arg);  
  }  
 }(i);  
 } 

4. 将变量 i 保存给在每个段落对象(p)上

 for( var i=0; i<ps.length; i++ ) {  
  ps[i].i = i;  
  ps[i].onclick = function() {  
  alert(this.i);  
  }  
 }

5. 将变量 i 保存在匿名函数自身

 for( var i=0; i<ps.length; i++ ) {  
 (ps[i].onclick = function() {  
  alert(arguments.callee.i);  
 }).i = i;  
 }   
} 

6. 用Function实现,实际上每产生一个函数实例就会产生一个闭包

 for( var i=0; i<ps.length; i++ ) {  
  ps[i].onclick = new Function("alert(" + i + ");");//new一次就产生一个函数实例 
 } 

7.用Function实现,注意与6的区别

 for( var i=0; i<ps.length; i++ ) {  
   ps[i].onclick = Function('alert('+i+')'); 
 }

猜你喜欢

转载自blog.csdn.net/gqzydh/article/details/80276829
今日推荐