【问题标题】:What is this? (function(){ })() [duplicate]这是什么? (函数(){})()[重复]
【发布时间】:2011-10-10 15:43:15
【问题描述】:

可能的重复:
What does this JavaScript snippet mean?
Location of parenthesis for auto-executing anonymous JavaScript functions?

(function(){

    //something here...

})() <--//This part right here.

这个)()到底是什么?
如果我把它改成这个())呢?

(function(){

    //something here...

}()) <--//Like this

【问题讨论】:

  • 我认为这没有任何作用。不过我可能是错的。
  • 同样的问题,see my answer
  • 非常常见的问题。
  • 您的两个示例之间只有“语法”差异,请查看this answer

标签: javascript function


【解决方案1】:

这声明了一个匿名函数并立即调用它。

这样做的好处是函数内部使用的变量不会添加到当前作用域,您也不会将函数名称添加到当前作用域。

请务必注意,函数声明周围的括号不是任意的。如果你删除这些,你会得到一个错误。

最后,您实际上可以使用额外的括号将参数传递给匿名函数,如

(function (arg) {
   //do something with arg
})(1);

http://jsfiddle.net/eb4d4/

【讨论】:

  • -1。除非我忽略了某些东西,否则第二个示例是完全有效的语法。
  • 为什么你认为他的第二个例子是无效的?
  • 仅供参考,从 ie6 到最新的 chrome 和 firefox 的每个浏览器都接受第二个版本,我已经看到它比第一个推荐了好几次。你只需要确保你的整个函数调用都在括号内;例如 (function(){ console.log('test'); }())。来自Crockford's website:“当要立即调用一个函数时,整个调用表达式应该用括号括起来,这样就可以清楚地看出生成的值是函数的结果,而不是函数本身。”
【解决方案2】:

它们是一样的。

在函数定义或函数调用周围必须有一个括号,以使其成为有效的 Javascript 语法,但这并不重要。

为了演示它的作用,使用命名函数:

function something() {}

// parenthesis around the function reference:
(something)();

// parenthesis around the function call:
(something());

【讨论】:

  • +1。这是回答 OP 提出的问题的唯一答案。
【解决方案3】:

它是一个匿名函数,在 () 调用该函数时会立即被调用,并且有 ( 和 ) 包装整个事情。

( // arbitrary wrapping
(function() { // begin anon function

}) // end anon function
() // call the anon function
) // end arbitrary wrapping

【讨论】:

    【解决方案4】:

    第一个只是将函数包装在()中,以便它可以立即使用()调用函数

    (function(){
        alert('Hi');
    })();
    

    提醒你好,而

    function(){
        alert('Hi');
    }
    

    什么都不做,因为你的函数永远不会被执行。

    【讨论】:

    • 本周1600点?伟大的保罗:)
    • @yahelc,你知道什么。我刚刚测试过,你是对的。我以为我以前曾尝试过这种方法,但它没有用,我一直认为是这种情况……那时我一定犯了其他错误,哈哈。编辑了我的帖子:)
    • @yahelc 实际上我认为我尝试的是没有任何括号,例如function(){ //Code }();
    • @PaulPro 删除了反对票。感谢您修复:)
    【解决方案5】:

    这只是一个匿名函数。 () 括号会立即调用该函数,而不是等待它在其他地方调用。

    【讨论】:

      【解决方案6】:

      它是一个立即调用的匿名函数。 ()) 不起作用,因为您需要在函数周围使用 () 才能使用 () 调用它。

      相当于:

      function a(){}
      a();
      

      【讨论】:

      • 它不是自调用的,它是一个匿名函数,创建后立即调用。如果你想制作自调用匿名函数,请阅读这篇博文:amix.dk/blog/post/19239
      【解决方案7】:

      这是声明一个匿名函数,然后立即执行它。这对于创建作用域变量很常见。

      【讨论】:

        【解决方案8】:

        在 JavaScript 中,函数定义是一个文字 - 这意味着,它是一个带有 Function 对象值的表达式。

        如果你在它后面加上(),你在定义它之后就有效地调用了这个函数。

        【讨论】:

          猜你喜欢
          • 2013-07-15
          • 2012-05-01
          • 2013-04-12
          • 1970-01-01
          • 2020-06-17
          • 2013-05-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多