闭包经典例子 闭包循环问题

什么是闭包:

当内部函数 在定义它的作用域 的外部 被引用时,就创建了该内部函数的闭包 ,如果内部函数引用了位于外部函数的变量,当外部函数调用完毕后,这些变量在内存不会被 释放,因为闭包需要它们.

1.var name = "The Window";   
  var object = {  
    name : "sss",  
    name : "xxx",  
    getNameFunc : function(){  
      return function(){  
        return this.name;  
     };   
    }   
};  
alert(object.getNameFunc()());  //The Window   匿名函数中的this对象具有全局性

2.var name = "The Window";   
  var object = {  
    name : "sss",  
    name : "xxx",  
    getNameFunc : function(){ 
        return this.name; 
    }   
};  
alert(object.getNameFunc());  //xxx  作为对象属性的函数,this对象即为当前对象

3.var name = "The Window";   //延伸的,这个我会。
  var object = {  
    name : "sss",  
    name : "xxx",  
    getNameFunc : function(){  
      return function(){  
        return this.name;  
     };   
    }   
};  
alert(object.getNameFunc());  //function(){  return this.name; }

闭包循环问题:

问题:每次点击都只弹出-1;

解决方案:

1.将下标作为对象属性

2.创建闭包空间,保存每一个i变量;

  • 用形参方式保存i

  • 不用传递参数的方式,而是创建临时变量保存

3.将事件绑定在匿名函数返回函数上;

  • 用形参方式保存i

  • 不用传递参数的方式,而是创建临时变量保存

4.将下标添加为绑定函数的属性

5.创建块级变量

原文地址:https://www.cnblogs.com/itbainianmei/p/5806058.html