闭包是什么
- 是一种语法特性
- 闭包 = 函数 + 自由变量
- 对于一个函数来说,变量分为全部,本地,局部变量
var b = function () {
var a = 1;
return function () {
console.log(a);
} // 这里的var a 和return的函数形成了闭包
}()()
闭包解决问题
- 隐藏变量(避免污染全局,所以用局部变量)
- 维持变量,使其不被垃圾回收
- 提供对局部变量的直接使用
var api = function () {
let height = 20;
return {
getHeight: () => height,
addHeight: () => height += 1
}
}()
console.log(api.addHeight());
console.log(api.addHeight());
console.log(api.getHeight());
闭包缺点
旧版本的IE浏览器,会造成内存泄漏。但是这不是闭包的缺点,是浏览器自己的问题。