1.什么是闭包
闭包就是能够读取其他函数内部变量的函数。
2.如何产生一个闭包
function foo() {
var a = 2;
function bar() {
console.log(a);
}
return bar;
}
var baz = foo();
baz(); //2 这就是闭包的效果
复制代码
3.闭包的应用
利用闭包的强大威力,可以用来创建模块模式(模块就是创建私有变量和私有方法)
function CoolModule() {
var something = 'cool';
var another = [1, 2 , 3];
funcion doSomething() {
console.log(something);
}
function doAnother() {
console.log(another.join(" ! "));
}
return {
doSomething: doSomething,
doAnother: doAnother
}
}
var foo = CoolModule();
foo.doSomething();
foo.doAnother();
复制代码
上述例子中的CoolModule()是一个独立的模块创建器,可以被任意调用多次,每次调用都会创建一个新的模块实例。当只需要一个实例时,可以对这个模式进行简单的改进来实现单例模式:
var foo = (function CoolModule() {
var something = 'cool';
var another = [1, 2 , 3];
funcion doSomething() {
console.log(something);
}
function doAnother() {
console.log(another.join(" ! "));
}
return {
doSomething: doSomething,
doAnother: doAnother
}
})()
foo.doSomething();
foo.doAnother();
复制代码
依据:(function CoolModule() {..})是函数表达式,而函数表达式只能在..所代表的位置中被防问,外部作用域则不行。
4.闭包的缺陷
闭包的缺点就是常驻内存会增大内存使用量,并且使用不当很容易造成内存泄露。