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


    什么是闭包:

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

    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.创建块级变量

  • 相关阅读:
    bfs入门 (HDU
    Codeforces Round #570 (Div. 3)B
    nyoj 277-车牌号 (map, pair, iterator)
    nyoj 276-比较字母大小 (顺序比较, 逆序输出)
    nyoj 275-队花的烦恼一 (stack, push, pop)
    nyoj 274-正三角形的外接圆面积 (R = PI * a * a / 3)
    nyoj 273-字母小游戏 (getline(cin, string))
    nyoj 268-荷兰国旗问题 (count)
    nyoj 266-字符串逆序输出 (isdigit(), geline(cin, my_string))
    nyoj 264-国王的魔镜 (string[-1:-int(str_len/2+1):-1])
  • 原文地址:https://www.cnblogs.com/itbainianmei/p/5806058.html
Copyright © 2020-2023  润新知