2017-02-25 91 views
1

我见过的JavaScript,看起来像这样:匿名函数是否必须使用括号括起来?

function() { 
    // do something 
}() 

,最近这样的事情:

(function() { 
    // do something 
})() 

有什么区别?两者都立即执行正确?

编辑:
关于第一个例子中的注意事项。该函数从另一个应用程序传递给浏览器,所以从我的结尾没有错误。在浏览器中运行时发生错误。在挖掘之后,我发现应用程序API正在将该函数传递给eval。上面的两个例子都适用于我,这就是为什么我问这个问题。

+3

这些都不是立即执行的。 – JJJ

+0

它们都没有执行,因为它们中没有一个在您的示例中被调用。你需要提供更多的上下文代码,你的模糊不清。此外,这个问题已经被多次询问和回答。请做一些研究。 – Tomalak

+1

请记住函数fn(){}()'在JS中的语法不正确。要立即执行函数,请使用IIFE'(function(){})()'或使用函数表达式 – Rajesh

回答

3

这两个函数都不会立即执行。立即调用的函数表达式在其末尾具有圆括号以及。像这样:

(function() { 
 
    console.log("not hello"); 
 
}); 
 

 
(function() { 
 
    console.log("hello"); 
 
})(); 
 
//^^

括号包围功能把它转化为它返回函数本身的表达式。然后,您只需使用()调用返回值(这是函数)。看看IIFE

编辑:您的编辑之后,第一个函数将只是把SyntaxError: Unexpected token (

相关问题