【发布时间】:2012-06-03 15:26:31
【问题描述】:
我在调用 JavaScript 函数表达式时看到了这些不同的模式:
模式#1
var global = function () {
return this;
}();
模式#2
var global = (function () {
return this;
}());
模式#3
var global = (function () {
return this;
})();
在我的测试中似乎一切正常(至少在大多数当前浏览器中)。在我看来,模式 #3 更好,因为它比 #1 更明确,并且它在实际调用之前返回函数,而不是 #2。
但是如果有一个更喜欢或更正确的,我正在徘徊......
【问题讨论】:
-
我不推荐#1,因为如果您不将返回值分配给变量(例如,如果您只是定义函数来建立闭包,并且正在调用它在一个无效的上下文中),你必须记住什么时候使用哪个构造。
-
@amnotiam:尝试运行
function() { console.log('foobar') }();(不将其结果分配给var),你会得到一个错误。当您在表达式中使用函数调用时,您可以使用这种样式,但是当您只是调用函数而忽略返回值时,您将需要使用其他模式之一。当两种模式都适用时,必须考虑在两种类似情况下需要哪种模式是徒劳的。 -
@lanzz:起初我不明白你的意思是没有赋值运算符或其他一些运算符来评估
function作为表达式的一部分。我以为你只是在谈论返回值。
标签: javascript function-expression