2016-7-30 闭包

闭包

  • 函数内部再定义一个函数,由此函数来使用函数(父)的局部变量

使用场景,比如这个局部变量的值要一直使用,则这是一个很好的保存该值的方法

  function f1(){
    var n=999;
    nAdd=function(){n+=1}
    function f2(){
      alert(n);
    }
    return f2;
  }
  var result=f1();
  result(); // 999
  nAdd();
  result(); // 1000
  1. 以上的f2函数就是一个闭包
  2. var result = f1(); 实质就是调用f2()
  3. 第一次result()结束之后,f1()函数并没有被回收,所以才会产生第二次result()的结果
  4. f1没有被回收的原因是:

    1)f2函数在f1函数内部(f2依赖f1)

    2)f2被赋值给了全局变量

  5. nAdd也是匿名函数也是一个闭包

原理

    function a() {
      var i = 0;
      function b() {
        alert(++i);
      }
      return b;
    }
    var c = a();
    c();

posted on 2016-07-30 21:36  背靠背  阅读(103)  评论(0编辑  收藏  举报

导航