一个函数,不论通过什么手段将它传递到它所在的词法作用域之外,它都会持有对原始定义作用域的引用,这个引用就是闭包, 无论在其他什么地方执行这个函数,都会观察到闭包。
名词解释:
词法作用域--书写代码时,根据函数书写位置确定的作用域。
下面举个例子
function outerFunc() {
// 此处定义的变量,处在innerFunc的词法作用域内
// innerFunc引用了在outerFunc中定义的变量a
var a = 10;
return function innerFunc() {
console.log(a);
}
}
// 调用了outerFunc函数,将innerFunc函数保存到了变量中
var rst = outerFunc();
// 此时,理论上函数outerFunc调用结束后,会立即销毁它的作用域
// 但是由于rst变量的地址仍旧指向innerFunc,而innerFunc里还用到了变量a
// 导致outerFunc执行完毕后,无法销毁它的作用域,该作用域内的变量a也无法通过其他方式再次访问
网友评论