为您解惑:立即执行函数: (function ( ){...})( ) 与 (function ( ){...}( )) 有什么区别.........

1.  传统的方法定义(声明)并执行如下:

      function foo() {...}     // 这是定义 ;定义只是让解释器知道其存在,但是不会运行。
      foo();                         // 这是语句  ;解释器遇到语句是会运行它的。

注:(1)传统的方法比较繁琐,定义(声明)和执行分开 ; (2)传统的方法直接污染全局命名空间 。

2. 目前比较流行的方法定义如下:

   function foo() {...})();

   或者

   (function foo(){...}()); 

3. 另外,上面的写法外,还有很多别的写法,比如:
    !function foo() {...}();  

    或者   

   +function foo() {...}();

   这些都可以.即:+function (){} 或 !function foo(){}这个等于 (function (){})。

*总结

   a.  (function(){})();  是 把函数当作表达式解析,然后执行解析后的函数;相当于 var a = function(){}; a(); a得到的是函数。
   b.  (function(){}());  是把函数表达式和执行当作语句直接执行;相当于 var a = function(){}(); a得到的是结果。
    以上两种方式的最终结果是一样的。
   c.  一般用(function (){}) 有个作用,就是避免全局变量;()只是起了 自执行的作用。

注:所谓不去污染全局命名空间,是因为以上两种定义方法创建了一个新的函数作用域,你真正的业务代码被封装在其中,自然就不会触碰到全局对象了。

如果你需要全局对象,就传递参数如下:

void function (global) {
    // 在这里,global 就是全局对象了
}(this)    // 在浏览器里,this 就是 window 对象


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值