1

由于语法错误,以下代码不起作用。

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/

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

4

2 回答 2

3

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

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

您可以立即包含表达式,但不能包含声明。

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

(使它成为一种表达方式。=使它成为一种表达方式。“无”使它成为一种宣言。

于 2013-07-16T13:38:12.133 回答
2

}()仅当函数被强制为表达式时才有效。您通常会看到(function(){...})()实现这一点,尽管小伙伴们可能会使用它!function(){...}()来保存一个字节(以牺牲操作为代价)。同样,var a = ...将操作数作为表达式,也是如此}()

于 2013-07-16T13:37:49.523 回答