犀牛书解析
- 从技术的角度来讲,所有的函数都是闭包:它们都是对象,都关联到作用域链。
红宝书解析
- 闭包是指有权访问另外一个函数作用域中的变量的函数。
个人总结
- 这不就是在说作用域链吗?
- 访问当前作用域没则往上层找,采用递归方式层层往上找,直到找到就近的或找到顶层都没的
- 函数定义时的作用域链在函数执行时也生效
- 闭包特征
- 函数嵌套函数并返回(函数执行或函数)
- 变量私有化
- 变量常驻在内存
简例子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;
}
}
}