美文网首页
随手记之对闭包的理解

随手记之对闭包的理解

作者: spicychocolate | 来源:发表于2017-04-24 11:13 被阅读0次

    闭包(closure)是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式,就是在一个函数内部创建另一个函数。

    闭包的作用
    • 可以读取函数内部的局部变量
    • 让这些局部变量始终保存在内存中(变量没有被javascript的垃圾回收机制回收)

    由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

    使用场景
    1.如何获得超过一个数据
    function foo () {
        var num1 = Math.random();
        var num2 = Math.random(); 
        return {
             num1: function () { 
               return num1; 
            }, 
            num2: function () { 
               return num2; 
            } 
      }
     }
    
    2.如何完成读取一个数据和修改这个数据
    function foo () {
        var num = Math.random();
        return {
            get_num : function () {
                return num;
            },
            set_num: function( value ) {
                return num = value;
            }
        }
    }
    
    使用案例
    1.属性
    var person = function(){
            var name = "张三";
            this.getName=function(){
              return name;
            };
          };
          var p = new person();
          alert(p.getName());
    
    2.保存复杂计算中的临时变量
    html:
        <ul>
            <li>aaa</li>
            <li>bbb</li>
            <li>ccc</li>
            <li>ddd</li>
        </ul>
    

    点击li的时候,alert各自的内容,比如点击第一个,alert “aaa”

    <script type="text/javascript">
            var foo = function(){
                var liList = document.getElementsByTagName("li"),
                i=0,
                max = liList.length;
                for(;i<max;i++){
                    (function(index){
                        liList[index].onclick = function(){
                            alert(liList[index].innerHTML);
                        };  
                    })(i);
                }
            };
            foo();
    
        </script>
    

    相关文章

      网友评论

          本文标题:随手记之对闭包的理解

          本文链接:https://www.haomeiwen.com/subject/scguzttx.html