是谁在调用匿名函数?

匿名函数和闭包紧紧相关. 想要理解闭包首先要搞懂匿名函数的运行方式.这次就探究一个问题,

到底是谁在调用匿名函数?

先让我们了解一下,匿名函数声明的两种方式.

第一种

    var a = function(x) { return x*x; }

第二种

    (function(x){
        alert(x*x);  
    })(2);

这两种方式都是匿名函数,效果一样. 第二个传递了参数,立刻运行. 第一个可以调用运行.当我们要立即用一个一次性函数的时候,大多数用第二种.

那么问题来了,任何程序都有调用者. 匿名函数的调用者是谁呢?

  • 先看第一种

      var a = function() { return alert(this); }
      a();
    
  • 结果是

  • 再看第二种

      (function(x{
          alert(this);  
      })(2);
    
  • 结果是

  • 再来看一个闭包

      function move() {
          return function () {
              alert(this)
          }
      }
      move()();
    
  • 结果是


结论是,window对象是所有匿名函数的妈妈. 就算在闭包也一样.

那么这意味着, 只要是匿名函数里面的 (this.var). 这个值的是全局的var.

posted @ 2017-03-07 21:51  MaxProAim  阅读(194)  评论(0编辑  收藏  举报