5

可能重复:
(function(){})(); 之间的区别 和函数(){}();
“(function ( ) { } ) ( )” 和 “(function ( ) { } ( ) )” 在 JavaScript 中的功能是否相同?

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

第一

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

第二

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

两者似乎都可以正常工作...

谢谢!

4

3 回答 3

10

没有不同。实际上,您()只需要使用简单的...

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

... JS 解析器无法正确识别。正如ES5 标准中所说:

此外,ExpressionStatement 不能以 function 关键字开头,因为这可能会使它与 FunctionDeclaration 产生歧义。

另一种 (to (...)) 解决方案是用一些一元运算符来扩充这个语句。两个都...

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

... 和 ...

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

... 将工作。

于 2012-12-23T13:56:58.997 回答
4

它们完全相同。两者在效率、输出或使用方面没有任何区别。使用其中任何一个都是偏好问题。

尽管 JS minfiers 常用的两种形式有一个较短的变体。也就是说,NOT对函数表达式进行逻辑运算并调用它:

!function() {
    console.log( x );
}();​
于 2012-12-23T13:56:46.147 回答
2

他们之间没有区别。两者都是立即调用的函数表达式。像 Douglas Crockford 这样的一些人更喜欢第二种方法。有些人更喜欢第一个。有趣的是,Crockford 的JSLint不允许第一种方法,所以我认为第二种方法更常见。

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

greet(); // This will work

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

函数表达式也不一样:

greet(); // This will not work

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

这就是你现在需要知道的几乎所有内容。

于 2012-12-23T14:08:48.640 回答