谈闭包先谈作用域链
js作用域包含 全局 和 函数 作用域(es5)
如:
var a = 'global var'
function fn(){
var b = 'function var';
var n = function(){
var c = 'inner function var'
}
}
c //; undefined
使用文氏图描述当前作用域划分
闭包可用于突破作用域链
如果要在全局作用域访问内部函数的c变量 需要使用闭包将其与全局作用域相连
var a = 'global var'
function fn(){
var b = 'function var';
var n = function(){
var c = 'inner function var'
return c;
}
return n();
}
c = fn();
c;// 'inner function var'
闭包与GC
js gc 采用 引用计数
我认为 闭包就是利用了 引用计数 特点,使得 局部作用域的变量引用+1 无法释放