为什么不'在某些情况下,我们需要在JavaScript函数定义周围多加一对括号

Why don't we need an extra pair of parentheses around JavaScript function definition in some cases?

本文关键字:周围多 定义 函数 JavaScript 我们 情况下 为什么不      更新时间:2023-09-26

由于语法错误,以下代码无法工作。

function() {
    alert('foo')
}()

上面代码的JSFiddle URL:http://jsfiddle.net/qr2fr/

可以通过以下方式在函数定义周围添加一对额外的括号来修复此代码。

(function() {
    alert('foo')
})()

上面代码的JSFiddle URL:http://jsfiddle.net/t6sJs/

然而,下面的JavaScript代码工作正常,并在函数定义周围没有额外的括号的情况下提醒字符串"foo"。

var a = function() {
    alert('foo')
}()

上面代码的JSFiddle URL:http://jsfiddle.net/qLKsq/

为什么这段代码在函数定义周围没有额外的一对括号的情况下工作?

在JavaScript中定义函数有两种方法。

声明(在编译时求值)和表达式

您可以立即涉及表达式,但不能涉及声明。

紧挨在前面的内容确定function是表达式还是声明。

CCD_ 2使其成为一个表达式。CCD_ 3使其成为一个表达式。"什么都没有"使它成为一种宣言。

}()只有在函数被强制为表达式时才有效。您通常会看到(function(){...})()来实现这一点,尽管吝啬鬼可能会使用!function(){...}()来保存一个字节(以操作为代价)。类似地,var a = ...将操作数作为表达式,因此}()起作用。