闭包

什么是闭包?
函数嵌套函数,闭包中的变量不会被垃圾回收机制回收;
闭包是一个有权访问另一个函数作用域中变量的函数;

闭包有什么好处?变量常驻内存;避免全局变量污染;模块化代码

1 //~~~一般
2 function aaa(){
3     var a = 1;
4     a ++;
5     alert(a);
6 }
7 aaa();//2
8 aaa();//2
 1 //~~~常驻内存
 2 function aaa(){
 3     var a = 1;
 4     return function(){
 5         a ++;
 6         alert(a);
 7     }
 8 }
 9 var bbb =aaa();
10 bbb();//2  >>  常驻内存
11 bbb();//3
 1 //~~~改造
 2 var aaa =(function(){
 3     var a = 1;
 4     return function(){
 5         a ++;
 6         alert(a);
 7     }
 8 })();//先自执行一次
 9 aaa();//2
10 aaa();//3
 1 //~~~私有方法,模块化代码
 2 var aaa =(function(){
 3     var a = 1;
 4     function bbb(){
 5         a ++;
 6         alert(a);
 7     }
 8     function ccc(){
 9         a ++;
10         alert(a);
11     }
12     return {
13         b : bbb,
14         c : ccc
15     };
16 })();//先自执行一次
17 aaa.b();
18 aaa.c();
 1 //~~~常用
 2 var aLi = document.getElementsByTagName("li");
 3 for(var i = 0;i < aLi.length;i ++){
 4     // aLi[i].onclick = (function(i){
 5     //     return function(){
 6     //         console.log(i);
 7     //     }
 8     // })(i);//先自执行一次
 9 
10     (function(i){
11         aLi[i].onclick = function(){
12             console.log(i);
13         };
14     })(i);
15 }

IE下内存泄漏

1 //~~~way1
2 var oDiv = document.getElementById("div1");
3 var id = oDiv.id;
4 oDiv.onclick = function(){
5     alert(id);
6 };
7 oDiv = null;
1 //~~~way2
2 var oDiv = document.getElementById("div1");
3 oDiv.onclick = function(){
4     alert(oDiv.id);//互相引用引发内存泄漏
5 };
6 window.onunload = function(){
7     oDiv.onclick = null;
8 };

 

posted @ 2016-09-17 18:46  DuangDang  阅读(237)  评论(0编辑  收藏  举报