javascript闭包的理解
一、闭包的含义
自己理解:返回的是一个函数,函数中有需要的变量,这些变量不能被直接访问
- 官方说法:一个拥有许多变量和绑定了这些变量的环境的函数,外部访问不到这些变量。
- 实际就是函数a内部有定义了一个函数b,由于javascript特有的链式作用域,外部不能读取不到函数a的变量,函数b可以读取函数a的变量,再函数a中返回函数b,外部就能用到函数a的变量了
- 注意:闭包中的变量不会主动被释放
简单的闭包如下:
function f1(){
var n = 100;
return function f2(){
alert(++n);
}
}
f1()()
二、闭包的作用
- 读取函数内部变量
- 可以让局部变量保存到内存中,实现变量数据共享
三、闭包可能引起的问题
- 滥用闭包会使内存增大,最好是在退出函数之前把不适用的局部变量删除
- 容易造成内存泄漏
四、自执行匿名闭包
自执行函数,即定义和调用合为一体。我们创建了一个匿名的函数,并立即执行它,由于外部无法引用它内部的变量,因此在执行完后很快就会被释放,关键是这种机制不会污染全局对象
- 第一种:
function closure() {
// 自执行
(function(){
console.log("aaa");
})();
}
closure()
- 第二种
function closure() {
// 自执行
(function(){
console.log("aaa");
}());
}
closure()