JavaScript之闭包详解

闭包:

AO:Activation Object , GO: Global Object

例1.

function add() {
      var num = 0;

      function a() {
        console.log(++num);
      }
      return a;
    }
    var myAdd = add();
    myAdd();
    myAdd();
    myAdd();

    // 1
    // 2
    // 3

例2.

function test() {
      var food = 'apple';
      var obj = {
        eatFood: function () {
          if (food != '') {
            console.log(food);
            food = '';
          } else {
            console.log('no');
          }
        },
        pushFood: function (myFood) {
          food = myFood;
        }
      }
      return obj;
    }
    var person = test();
    person.eatFood();
    person.eatFood();
    person.pushFood('banana'); //只是赋值,未输出 
    person.eatFood();

    // apple,
    // no,
    // banana

 
例3.

a = 100;

    function demo(e) {
      function e() {}
      arguments[0] = 2;
      console.log(e);
      if (a) {
        var b = 123;

        function c() {
          //不允许在if中。。
        }
      }
      var c;
      a = 10;
      var a;
      console.log(b);
      f = 123;
      console.log(c);
      console.log(a);
    }
    var a;
    demo(1);
    console.log(a);
    console.log(f);


    // GO: a:undefined,100
    //     demo: f demo(){},
    //     f:123,

    // AO: e: undefined,f e(){},2
    //     b: undefined,
    //     c: undefined , f c(){},
    //     a: undefined , 10

    // 2,
    // undefined,
    // undefined
    // 10,
    // 100,
    // 123

 
例5.

 
 

 

 
持续更新ing。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值