当前位置:  开发笔记 > 编程语言 > 正文

函数声明后在javascript中做空括号()是什么?

如何解决《函数声明后在javascript中做空括号()是什么?》经验,为你挑选了4个好方法。

我正在尝试阅读Prototype源代码.我来到这一部分.(不幸的是,这个片段在开头).

这是什么意思?

  Browser: (function(){
    var ua = navigator.userAgent;
    var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';
    return {
      IE:             !!window.attachEvent && !isOpera,
      Opera:          isOpera,
      WebKit:         ua.indexOf('AppleWebKit/') > -1,
      Gecko:          ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1,
      MobileSafari:   /Apple.*Mobile.*Safari/.test(ua)
    }
  })(),

我指的是逗号前的最后一行?



1> Frank Schmit..:

代码定义了一个匿名函数((function (){ ... })位),然后调用它(没有参数).然后,它将值分配给Browser对象的属性,该属性可能是在代码片段之外定义的.

您还可以在某处定义函数:

function myFunction() {
    var ua = navigator.userAgent;
    var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';
    return {
      IE:             !!window.attachEvent && !isOpera,
      Opera:          isOpera,
      WebKit:         ua.indexOf('AppleWebKit/') > -1,
      Gecko:          ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1,
      MobileSafari:   /Apple.*Mobile.*Safari/.test(ua)
}

然后调用它:

var foo = myFunction();

然后分配值:

...
Browser: foo,
...

这样做的一个缺点是你用一个你不会在其他任何地方使用的函数和变量来"污染你的命名空间".第二个问题是您不能在函数定义中使用任何本地范围的变量的值(匿名函数表现为闭包).



2> Andrew Hedge..:

(function () {}) 创建一个匿名函数.

添加()到最后调用刚刚创建的函数.

对于此特定函数,匿名函数会向Browser对象返回多个属性.所以,你最终的,布尔值如Browser.IE,Browser.Opera等.


@ayjay实际上任何一个都是对的,但Crockford使用前者,所以我会选择那个.[http://javascript.crockford.com/code.html](http://javascript.crockford.com/code.html)
哪一个是正确的符号?`(function(){}());`OR`(function(){})();` - 我在最后讨论括号的顺序.
你的第一个是对的@ayjay

3> cobbal..:

它调用刚刚声明的匿名函数,有效地导致"块"被评估.



4> meder omural..:

这是一个简单的函数调用,foo()除了它调用匿名函数文字之外没有什么不同,函数的结果被赋给了Browser属性.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有