在许多书籍/博客文章中,自执行匿名函数模式被写成这样:
(function() {
var foo = 'bar';
})();
然而,在此运行JSLint会出现以下错误:
将调用移入包含函数的括号中。
例如,将其更改为以下内容即可正常工作:
(function() {
var foo = 'bar';
}());
问题
- 为什么第一个实现对于JSLint来说不够好?它们有什么区别?
- 什么是首选形式?JSLint总是正确的吗?
- 它为什么能工作?毕竟,
function(){}()
会抛出SyntaxError: Unexpected token (
。但用括号包裹它突然就可以工作了?例如:(function(){}()
) - 可以正常工作
(毕竟这是JavaScript,而不是Lisp,那么在否则会产生语法错误的情况下添加括号的效果是什么?)
编辑:这在某种程度上是对此的后续(虽然我不会说完全重复):JSLint error: "Move the invocation into the parens that contain the function",因此我的主要问题是第3个问题,为什么它会工作?
:P
- Fabrício Matté