【问题标题】:declaring and defining functions in javascript在 javascript 中声明和定义函数
【发布时间】:2012-09-21 07:27:10
【问题描述】:



我对 javascript 中的函数(对象)有疑问。

我有 2 段代码,例如,

    var a= function(){
    console.log('abc')
     }



     var a= (function(){
     console.log('abc')
     })


这两者有什么区别>>
谢谢:)

【问题讨论】:

  • 没有任何区别。括号在那里没有做任何有用的事情。你可以做(((function(){}))),它仍然是同样的事情,除非你的意思是(function(){}())...
  • @theintersect - 这个问题是关于立即调用的函数表达式。在这个问题中没有调用函数。
  • 确实如此,但在他调用时非常有帮助。 peter.michaux.ca/articles/an-important-pair-of-parens。但是谢谢你,我可能忽略了他的问题。

标签: javascript function object


【解决方案1】:

没有实际区别。它们都会导致将匿名函数分配给a

第一个是“simple assignment”。在第二个中,括号充当“grouping operator”,它做了一件事:

产生式 PrimaryExpression : ( Expression ) 的评估如下:

  • 返回计算表达式的结果。这可能是引用类型。

所以分组运算符将返回其中包含的函数,并将其分配给a,就像第一个示例一样。

【讨论】:

    【解决方案2】:

    现在没有区别,但是如果你在第二个函数之后添加另一个括号 (),它将在不调用的情况下运行函数。

     var a= (function(){
         console.log('abc')
         })()
    

    它会立即打印'abc'

    【讨论】:

    • 你也可以做 var a= function(){ console.log('abc') }() 所以我认为那里也没有区别。我知道的唯一细微差别是函数名的要求。有兴趣可以看我的回答。
    • 也很高兴知道在这种情况下您不会获得对 a 的引用,您需要显式返回一些值
    【解决方案3】:

    没有区别。您有一个函数表达式,您可以在表达式周围放置任意数量的括号。

    就像这样:

    a = 42;
    

    和这个是一样的:

    a = (42);
    

    还有这个:

    a = (((((42)))));
    

    【讨论】:

      【解决方案4】:

      有区别。

      ( 和 ) 构成一个分组。分组只能包含一个表达式,因此其中的任何函数都是表达式而不是声明。

      由于 ECMA 规定函数声明必须始终有函数名,而函数表达式可以省略它,您将能够执行以下操作

      (function() {});
      

      而以下声明无效

      function() {};
      

      这并不重要,但仍然...阅读这篇深入的文章了解更多信息:http://kangax.github.com/nfe/

      【讨论】:

        【解决方案5】:

        如前所述,您给出的两个示例基本相同。

        这个问题的答案中包含有关括号用法的更多信息,可能值得您花时间研究一下!

        Why are parenthesis used to wrap a javascript function call?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-01-17
          • 1970-01-01
          • 2018-11-09
          • 2015-04-08
          • 2020-10-07
          • 2023-03-12
          相关资源
          最近更新 更多