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


    闭包:是由函数和与其相关的引用环境组合而成的。
    闭包允许函数访问其引用环境中的变量(又称自由变量)
    广义上说,所有JS的函数都可以称为闭包,因为JS函数在创建时保存了当前的词法环境。

    function add() {
        var i = 0;
        return function () {
            alert(i++);
        }
    }
    var f = add();
    f();    //0
    f();    //1
    执行完以后,变量i,并没有被释放。
    add函数的返回结果就是闭包。

     


    闭包的应用:
    (1)可以保存现场, 点击li标签时,弹出1,2,3,说对应的数字

    <ul id="uli">
    	<li>1111</li>
    	<li>2222</li>
    	<li>3333</li>
    	<li>4444</li>
    	<li>5555</li>
    </ul>
    
    <script type="text/javascript">
    
    	var uli = document.getElementById('uli');
    	var lis = uli.getElementsByTagName('li');
    
    	function helper(i) {
    		return function () {
    			alert(lis[i].innerHTML);
    		}
    	}
    
    	for (var i = 0; i < lis.length; i++) {
    		lis[i].onclick = helper(i);
    	}
    
    </script>
    

     

    (2)封装

    var observer = (function () {
    
    	var observerList = [];
    
    	return {
    		add : function (obj) {
    			observerList.push(obj);
    		},
    		empty :  function (obj) {
    			observerList = [];
    		},
    		getCount : function () {
    			return observerList.length;
    		},
    		get : function () {
    			return observerList;
    		}
    	}
    
    })();
    

     外部无法访问内部的变量,而内部可以访问外部的变量。可以只暴露借口,而私有变量得到了保护。

  • 相关阅读:
    Lua的数学函数
    以KeyValue形式构建Lua Table
    查看占用网速的程序
    JSONObject以及json(转)
    Windows 7 下玩游戏不能全屏
    Windows 7 卸载 IE10
    win7无线网络共享
    打印后台程序服务没有启动,每次打开Powerdesigner都会要我安装打印机
    SQL 条件 判断 select case as
    MyEclipse Web项目调试
  • 原文地址:https://www.cnblogs.com/hgonlywj/p/4857743.html
Copyright © 2011-2022 走看看