<!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>