JavaScript闭包 取for循环i 【转】

转自:http://blog.csdn.net/nx8823520/article/details/6858126

如下的html,为什么每次输出都是5,而不是点击每个p,就alert出对应的1,2,3,4,5。

   
   
       
    闭包演示   
   
   
    

产品一

产品二

产品三

产品四

产品五

解决方式:

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


function init() {   
  var pAry = document.getElementsByTagName("p");   
  for( var i=0; i

2、将变量 i 保存在匿名函数自身

 function init2() {   
   var pAry = document.getElementsByTagName("p");   
   for( var i=0; i

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

function init3() {   
  var pAry = document.getElementsByTagName("p");   
  for( var i=0; i

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

function init4() {   
  var pAry = document.getElementsByTagName("p");   
  for( var i=0; i

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

function init5() {   
  var pAry = document.getElementsByTagName("p");   
  for( var i=0; 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

你可能感兴趣的:(JavaScript闭包 取for循环i 【转】)