JavaScript中声明和定义函数

3
我是一名有用的助手,将为您翻译文本。



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

我有两段代码,如下:

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



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

这两者之间有什么区别?谢谢 :)

没有任何区别。括号在那里没有任何有用的作用。你可以写成 (((function(){}))),它仍然是一样的东西,除非你的意思是 (function(){}())... - elclanrs
请查看此链接:https://dev59.com/ZWw15IYBdhLWcg3wYawx - theintersect
@theintersect - 这个问题是关于立即调用函数表达式的。这个问题中没有对函数进行调用。 - James Allardice
确实如此,但是当他被调用时,它非常有帮助。 http://peter.michaux.ca/articles/an-important-pair-of-parens。但还是谢谢你提醒我,不然我可能会忽略他的问题。 - theintersect
5个回答

1

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

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

它会立即打印出'abc'


1
你也可以这样做:var a= function(){ console.log('abc') }()所以我认为这里也没有什么区别。我知道的唯一细微的差别在于需要一个函数名。如果你感兴趣,可以看看我的答案。 - Willem Mulder
还有一点需要注意,就是在这种情况下你不会得到对a的引用,你需要显式地返回某个值。 - Roman

1

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

就像这样:

a = 42;

与此相同:

a = (42);

还有这个:

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

1

这里有一个区别。

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

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

(function() {});

虽然以下声明无效

function() {};

这并不经常发生,但还是...阅读这篇深入的文章了解更多:http://kangax.github.com/nfe/


1

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

第一个是“简单赋值”。在第二个中,括号充当“分组运算符”,它只执行一件事:

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

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

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


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接