js中的闭包其实是对于局部作用域的保持,如果没有这个特性,便无法取到函数内局部作用域内的私有变量。函数内部以子函数引用父函数变量的形式返回一个所谓的闭包,既私装有来自私密空间的空气的一个包裹,带着这个包裹到哪里,你都可以打开小口,呼吸一下原汁原味的密闭空间里的空气。
其实在js的模块化中我们也经常用这种手段来处理。通过函数来创造一个不受打扰的私密空间,通过闭包来返回一个对外暴露的接口。如下:
(function(){
var name = 'jalon';
var age = 25;
function getName() {
return name;
}
function getAge() {
return age;
}
return {
getAge: getAge,
getName: getName
}
})();
注意避免循环引用,这样在ie9下的浏览器中会不予回收,内存泄露:
如
obj.prop2 = function(){
console.log(obj.prop1) ;
}
会造成obj无法回收