zoukankan      html  css  js  c++  java
  • js的闭包

    整理一下:

    1:什么是闭包?

    a.函数嵌套函数

    function aaa(){
       function bbb();
    }
    

      

    b.内部函数能够引用外部函数的参数和变量,参数和变量不会被垃圾回收机制所收回

    function aaa(){
    	var a = 5;
    	function bbb(){
    		alert(a);
    	}
    	return bbb;
    }
    
    var c = aaa();
    
    c();
    

      

    2.闭包有什么好处?应用在那里?

     好处:

    1.希望一个变量长期驻扎在内存当中:如上b
    2.避免全局变量的污染(为了性能,尽量少使用全局变量)

    var aaa = (function(){
    
        var a = 1;
        return function(){
            a++;
            alert(a);
        }
    
    })();
    
    aaa();  //2
    aaa();  //3

    3.私有成员的存在

    var aaa = (function(){
    
    	var a = 1;
    	
    	function bbb(){
    		a++;
    		alert(a);
    	}
    	
    	function ccc(){
    		a++;
    		alert(a);
    	}
    	
    	return {
    		
    		b : bbb,
    		c : ccc
    		
    	}
    
    })();
    
    
    aaa.b();  //2
    aaa.c();  //3 

    用法:
    1.模块化代码


    2.在循环中直接找到对应元素的索引

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    <script>
    window.onload = function(){
    var aLi = document.getElementsByTagName('li');

    /*for(var i=0;i<aLi.length;i++){

    (function(i){

    aLi[i].onclick = function(){
    alert(i);
    };

    })(i);


    }*/

    for(var i=0;i<aLi.length;i++){


    aLi[i].onclick = (function(i){

    return function(){
    alert(i);
    }

    })(i);


    }

    };
    </script>
    </head>

    <body>
    <ul>
    <li>11111111111</li>
    <li>11111111111</li>
    <li>11111111111</li>
    </ul>
    </body>
    </html>

    3.闭包需要注意得地方?

    IE下会引发内存泄漏:所谓泄露就是说,资源不会被释放,会在cpu离累加,知道浏览器关闭

  • 相关阅读:
    1046 A^B Mod C
    1019 逆序数
    1012 最小公倍数LCM
    1011 最大公约数GCD
    序列化
    bigdecimal
    equals 和hashcode
    java多线程-读写锁原理
    Java并发编程:volatile关键字解析
    面试
  • 原文地址:https://www.cnblogs.com/angleyuli/p/4730844.html
Copyright © 2011-2022 走看看