闭包是作用域应用的特殊情况 它有两种变现
1 . 函数作为返回值被返回
function create() {
const a = 100;
return function(){
console.log(a)
}
}
const fn = create();
const a = 200;
fn(); //100
2 . 函数作为参数被传递
function print(fn) {
const a = 200;
fn()
}
const a = 100;
function fn(){
console.log(a)
}
print(fn) //100
总结:所有自由变量的查找是在函数定义的地方向上一级作用域查找 ,而不是在调用的地方。
tips:
闭包会引起内存泄漏,所以再函数结束前应该将其赋值为null
网友评论