闭包

96 阅读1分钟

犀牛书解析

  • 从技术的角度来讲,所有的函数都是闭包:它们都是对象,都关联到作用域链。

红宝书解析

  • 闭包是指有权访问另外一个函数作用域中的变量的函数。

个人总结

  • 这不就是在说作用域链吗?
    • 访问当前作用域没则往上层找,采用递归方式层层往上找,直到找到就近的或找到顶层都没的
    • 函数定义时的作用域链在函数执行时也生效
  • 闭包特征
    • 函数嵌套函数并返回(函数执行或函数)
    • 变量私有化
    • 变量常驻在内存
简例子1
var scope = 'global';
function checkscope(){
    var scope = 'local';
    function f(){ return scope;}
    return f();
}
checkscope();
简例子2
var scope = 'global';
function checkscope(){
    var scope = 'local';
    function f(){ return scope;}
    return f;
}
checkscope()();
高例子1
function counter(){
 var n = 0;
 return {
  count: function(){
      return n++;
  },
  reset:function(){
      n=0;
  }
 }
}