代码之家  ›  专栏  ›  技术社区  ›  Teej

在javascript中,函数声明后的空括号()做什么[[副本]

  •  57
  • Teej  · 技术社区  · 16 年前

    我在读原型机的资料。我已经讲到这一部分了。(不幸的是,这个片段还在开头)。

    这个()是什么意思?

      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)
        }
      })(),
    

    4 回复  |  直到 15 年前
        1
  •  46
  •   Frank Schmitt    16 年前

    代码正在定义一个匿名函数( (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
  •  41
  •   Andrew Hedges    16 年前

    (function () {})

    添加 ()

    在这个特定函数的情况下,匿名函数向 Browser 对象。所以,你得到的是布尔值,例如。, Browser.IE , Browser.Opera 等等。

        3
  •  13
  •   cobbal    16 年前

    它调用刚刚声明的匿名函数,有效地导致对“块”进行求值。

        4
  •  5
  •   meder omuraliev    16 年前

    这是一个简单的函数调用,和 foo() Browser 财产。