JavaScript自我调用函数

时间:2012-12-23 13:54:45

标签: javascript self-invoking-function

  

可能重复:
  Difference between (function(){})(); and function(){}();
  Are “(function ( ) { } ) ( )” and “(function ( ) { } ( ) )” functionally equal in JavaScript?

我只是想知道这两个例子之间是否存在差异(关于功能):

第一

(function foo() {
console.log("bar")
})()

第二

(function foo() {
console.log("bar")
}())

两者似乎都很好......

谢谢!

3 个答案:

答案 0 :(得分:10)

没有区别。实际上,您只需使用()因为简单...

function() { console.log('bar'); } ();

... JS解析器无法正确识别。如ES5 standard中所述:

  

此外,ExpressionStatement不能以function关键字开头   因为这可能会使FunctionDeclaration模糊不清。

替代((...))解决方案是使用一些一元运算符来扩充此语句。既...

+function() { console.log('bar'); } ();

......和......

!function() { console.log('bar'); } ();

......会奏效。

答案 1 :(得分:4)

它们完全一样。在效率,输出或使用方面,两者之间没有任何区别。使用任何一个都是一个偏好的问题。

虽然JS小工具常用的两种形式的变化较小。也就是说,逻辑NOT - 函数表达式并调用它:

!function() {
    console.log( x );
}();​

答案 2 :(得分:2)

它们之间没有区别。两者都是immediately invoked function expressions。像Douglas Crockford这样的人更喜欢second method。有些人更喜欢第一个。有趣的是,Crockford的JSLint不允许第一种方法,所以我认为第二种方法更常见。

哦,如果您使用函数声明而不是函数表达式,那么您可以在函数出现之前调用该函数。这是因为声明在JavaScript中提升:

greet(); // This will work

function greet() {
    alert("Merry Christmas!");
}

对于函数表达式,情况并非如此:

greet(); // This will not work

var greet = function greet() {
    alert("Merry Christmas!");
};

这就是你现在需要知道的全部内容。