什么是闭包?闭包的用途是什么?闭包的缺点是什么?
- 闭包:闭包是指有权访问另外一个函数作用域中的变量的函数。
- 用途:参考末尾示例代码
- 可以读取函数内部的变量:通过
inner
访问outter
内部变量val
- 让这些变量的值始终保持在内存中:
val
的值一直保存在内存中,不会随着outter
函数调用结束而消逝
- 可以读取函数内部的变量:通过
- 缺点:由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。
解决方法:在退出函数之前,将不使用的局部变量全部删除。
示例代码:
function outter() {
let val = 100;
function inner() {
console.log(val); //访问outter内部变量val
}
return inner; //将inner函数的引用作为返回值
}
const foo = outter(); //将inner函数的引用传递给foo
foo(); //输出:100