(function(){})() 之间的区别;和函数(){}();

IT技术 javascript syntax
2021-01-28 06:12:56

可能的重复:
“(function ( ) { } ) ( )” 和 “(function ( ) { } ( ) )” 在 JavaScript 中功能相同吗?

这是我还没有完全弄清楚的事情,但我一直在使用 function(){}() 只是因为如果我添加括号,我的 VIM 语法高亮就会搞砸,尽管我已经看到 (function(){}) () 很多次,也许它是 IE 的东西?

编辑:

var singleton = function() {
    // code
}();

var singleton = (function() {
    // code
})();
3个回答

Peter Michaux 讨论了一对重要的 Parens 中的差异

基本上括号是一种约定,表示紧随其后的是立即调用的函数表达式,而不是普通函数。特别是如果函数体很长,这会减少惊喜,

额外的一组括号更清楚地表明您正在构造一个函数然后调用它。这是一个编码风格的东西,而不是一个功能的东西。

我想标题有点不一致,关于 OP 的 2 个例子。但是,看问题内容和前2个答案,我觉得它们是对的。另外,我提到函数声明的意思是括号仅在用于函数声明时才重要。不能立即调用函数声明。但是如果在括号内“分组”,函数声明就变成了一个函数表达式,因此可以立即调用。我的意思是 OP 的 2 个示例都是函数表达式,因此带或不带括号没有区别。
2021-03-19 06:12:56
@bryantsai:你有一点,因为 OP 的示例(稍后添加)使用函数表达式作为赋值的一部分,因此不需要括号,但问题更笼统,这个答案具有误导性。另外,我对您在引用函数声明时的建议感到困惑。
2021-03-20 06:12:56
OP提供的2个例子都是函数表达式,即使去掉括号也不会有语法错误。只有函数声明会。
2021-03-22 06:12:56
不。如果没有括号,包含函数表达式的单个语句将给出语法错误。
2021-03-28 06:12:56
好的我明白了。我的观点仍然成立:仅由函数表达式(例如function() { alert("1"); }组成的语句是语法错误。
2021-03-29 06:12:56
function(){}();

在大多数浏览器中不起作用。您应该在函数周围使用括号以执行它

(function(){})();

然后浏览器会知道最后一个括号应该应用于所有表达式

function(){}

UPD:如果您不使用括号,浏览器可能会误解您。如果您只是调用该函数并关闭结果

function() {
    alert(1);
}();

然后 ff 和 ie 会抛出错误

功能(){}(); 如果它是一个函数表达式,它在所有浏览器中都有效。特别是 var foo = function(){}(); 作品。阅读yura.thinkweb2.com/named-function-expressions/#expr-vs-decl了解更多信息。
2021-04-10 06:12:56