随手记之对闭包的理解

闭包(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>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 一、变量...
    zock阅读 1,085评论 2 6
  • 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 一、变量...
    zouCode阅读 1,287评论 0 13
  • 作用域和闭包是 JavaScript 最重要的概念之一,想要进一步学习 JavaScript,就必须理解 Java...
    劼哥stone阅读 1,202评论 1 13
  • 闭包: 官方”的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该...
    小裁缝sun阅读 644评论 0 5
  • 老杨的钥匙又丢了。 他在晚饭前给我打来电话:“老甘啊,还没吃吧,等会有空么?”我看了眼正在准备晚饭的妻子,妻子一下...
    基迪阅读 369评论 1 0