1. 匿名自执行函数javascript
咱们在实际状况下常常遇到这样一种状况,即有的函数只须要执行一次,其内部变量无需维护,那么咱们可使用闭包:java
如页面加载完给多个li改变文本 闭包
//将所有li字体变为红色 (function(){ var els = document.getElementsByTagName('li'); for(var i = 0,lng = els.length;i < lng;i++){ els[i].style.color = 'red'; } })();
咱们建立了一个匿名的函数,并当即执行它,因为外部没法引用它内部的变量,
所以els,i,lng这些局部变量在执行完后很快就会被释放,节省内存!
关键是这种机制不会污染全局对象。模块化
2. 实现封装/模块化代码函数
var person= function(){ //变量做用域为函数内部,外部没法访问 var name = "default"; return { getName : function(){ return name; }, setName : function(newName){ name = newName; } } }(); console.log(person.name);//直接访问,结果为undefined console.log(person.getName()); //default person.setName("loren"); console.log(person.getName()); //loren
内容泄漏大多数都是变量循环调用没有即时的清理,因此一直存在内存里面。
清理方法
var obj = { // 定义变量
x:1
}
obj= null; // 清除变量
优势:字体
可让一个变量常驻内存 (若是用的多了就成了缺点ui
避免全局变量的污染 spa
私有化变量code
缺点对象
由于闭包会携带包含它的函数的做用域,所以会比其余函数占用更多的内存
引发内存泄露