【发布时间】:2013-04-08 06:14:04
【问题描述】:
在许多书籍/blog posts 中,自调用匿名函数模式是这样写的:
(function() {
var foo = 'bar';
})();
但是在此运行 JSLint 会出现此错误:
将调用移动到包含函数的括号中。
例如将其更改为此作品:
(function() {
var foo = 'bar';
}());
问题
- 为什么第一个实现对 JSLint 来说不够好?有什么区别?
- 首选形式是什么? JSLint 总是正确的吗?
-
为什么会起作用? 毕竟
function(){}()会抛出SyntaxError: Unexpected token (
但是用括号包裹它会突然起作用?例如(function(){}()) - 工作正常
(毕竟这是 JavaScript,而不是 Lisp,那么包装括号对 ohterwise 语法错误有什么影响?)
编辑:这是对此的后续(虽然我不会说完全重复):JSLint error: "Move the invocation into the parens that contain the function",所以我的主要问题是#3,为什么它完全有效?
【问题讨论】:
-
很多很多重复。简而言之,1-2:因为 Crockford 更喜欢这样。创建 JSHint 只是因为 JSLint 过于偏颇。 3. 因为标识符对于函数表达式是可选的,而对于函数声明是必需的(括号使其成为函数表达式)。见kangax.github.io/nfe/#expr-vs-decl
-
我不使用 JSLint。如果您这样做,请了解这是一个有偏见的工具。我更喜欢始终使用
;(function ..)()形式 - 前导;可防止可能出现更模糊的错误。两种形式都会导致等效的语法树。 -
@user2246674 你是不是把 L 打错了 H?
:P -
@FabrícioMatté 是的,是的。
标签: javascript