在某些情况下,为什么我们不需要围绕JavaScript函数定义添加额外的括号?

时间:2013-07-16 13:35:51

标签: javascript

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

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网址:http://jsfiddle.net/qLKsq/

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

2 个答案:

答案 0 :(得分:3)

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

声明(在编译时评估)和表达式(在运行时评估)。

您可以立即使用表达式,但不能声明。

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

(使其成为一种表达方式。 =使它成为一种表达。 “没什么”使它成为宣言。

答案 1 :(得分:2)

}()仅在函数被强制为表达式时才有效。您通常会看到(function(){...})()来实现此目的,尽管可能会使用!function(){...}()来保存一个字节(以操作为代价)。同样,var a = ...将操作数作为表达式,因此}()可以工作。