首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在javascript中,函数声明后的空括号()有什么作用?

在javascript中,函数声明后的空括号()有什么作用?
EN

Stack Overflow用户
提问于 2010-03-11 09:52:08
回答 4查看 40.6K关注 0票数 63

我正在试着阅读原型源代码。我已经讲到这一部分了(不幸的是,这段代码才刚刚开始)。

这()是什么意思?

代码语言:javascript
复制
  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)
    }
  })(),

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-03-11 09:58:27

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

你也可以在某个地方定义函数:

代码语言:javascript
复制
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)
}

然后叫它:

代码语言:javascript
复制
var foo = myFunction();

然后赋值:

代码语言:javascript
复制
...
Browser: foo,
...

这样做的一个缺点是,您会用一个在其他地方不会使用的函数和变量“污染您的名称空间”。第二个问题是,您不能在函数定义中使用任何局部作用域变量的值(匿名函数的行为类似于闭包)。

票数 46
EN

Stack Overflow用户

发布于 2010-03-11 10:07:44

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

()添加到末尾将调用刚刚创建的函数。

在此特定函数的情况下,匿名函数向Browser对象返回几个属性。因此,您最终得到了布尔值,例如,Browser.IEBrowser.Opera等。

票数 41
EN

Stack Overflow用户

发布于 2010-03-11 09:53:47

它调用刚刚声明的匿名函数,有效地导致“块”被计算。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2422026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档