使用闭包主要是为了设计私有的方法和变量。闭包的优点是可以避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。在js中,函数即闭包,只有函数才会产生作用域的概念
闭包有三个特性
1.函数嵌套函数
2.函数内部可以引用外部的参数和变量
3.参数和变量不会被垃圾回收机制回收
闭包的面试题
①
var x = 20;
var a = {
x : 15,
fn : function(){
var x = 30;
return function(){
return this.x;
};
}
};
console.log(a.fn()); //function(){return this.x}
console.log((a.fn())()); // 20
console.log(a.fn()()); //20
console.log(a.fn()() == (a.fn())()); // true
console.log(a.fn().call(this)); // 20
console.log(a.fn().call(a)); // 15
②
var color ='green';
var test={
color:'blue';
getColor:function(){
var color = 'red';
alert(this.color);
}
}
var getColor = test.getColor;
getColor(); //green
tset.getColor(); //blue