什么是闭包
官方解释:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函 数),因而这些变量也是该表达式的一部分
简单来说闭包就是在一个函数内声明另一个函数(不太严谨的说法)
产生闭包的条件
- 闭包一定是函数对象
- 函数内保持对上层作用域的访问
- 当函数在其定义的作用域外进行访问时才产生闭包
闭包例子
function fn(){ //函数fn
var n = 2;
return function fc() { //内部函数fc
console.log(n) //访问上层作用域的n
}
}
fn()()
闭包的优缺点
优点
- 避免变量命名的污染
- 可以让属性和方法私有化
- 能读取外部变量而外部不能读取闭包内部变量
- 变量不会被垃圾回收
缺点
- 比较浪费内存IE浏览器下容易内存泄漏
使用闭包写模块
//简易demo
(function () {
var name = "Annie";
var age = 18;
var sex = '女';
function bath() {
console.log(name+"在洗澡");
};
function run() {
console.log(age+"岁的"+name+"在跑步");
};
window.model = {
name:name,
sex:sex,
run:run
};
})();
console.log(model); // {name: "Annie", sex: "女", run: ƒ}
console.log(model.name); // Annie
console.log(model.age); // undefined
console.log(model.sex); // 女
model.run(); // 18岁的Annie在跑步