<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>闭包</title>
</head>
<body>
<script>
//一、作为缓存.第二次使用对象时候,可以不用新建对象。单例模式的实现等等。
//规则:缓存里面如果没有的话,就新建对象到缓存,如果有的话就直接从缓冲里面拿
var Cache1=(function(){
var cache={};
return{
getObj:function(name){
if(name in cache){
return cache[name];
}
var temp=new Object(name);
cache[name]=temp;
return temp;
}
}
})();
document.write(Cache1+"<br>");
document.write(Cache1.getObj("Wendy")+"<br>");
//二、实现封装过程。封装对象中的变量不能直接访问,可以用提供的闭包来访问。
//避免非法访问
var person=(function(){
var name="";
return {
getName:function(){
return name;
},
setName:function(value){
name=value;
}
}
})();
document.write(person+"<br>");
person.setName("Red");
document.write(person.getName());
//三、自定义js模块,大多数情况还是使用官方的js文件比较多,这里就不深入了解了
//四、闭包的缺点:闭包调用的变量常驻内存,可能造成内存泄露的问题
//解决方法:将外部调用闭包的变量赋值为null,这样系统就会认为闭包的变量是垃圾,从而回收
</script>
</body>
</html>