有人可以解释为什么JSLint接受这种风格:
(function () { /* .... */ }());
但不喜欢这个:
(function () { /* .... */ })();
我知道JSLint有一些非常严格的规定,但至少大部分规则都有(据称)某种目的。在这种特殊情况下,我无法弄清楚这个目的是什么。
(我不想在这里争论,我只是想了解原因。)
答案 0 :(得分:0)
好的,这几乎与most recent jslint-tagged question before this one完全相同,后者也询问防守领先的半冒号。在询问之前,请记得在您的标签内搜索!
那就是说,让我们免费通过 - 另一个问题没有得到接受的答案,所以你走了。 ; ^)(那就是说,我们应该把它们中的一个当成一个骗子。)
这就是为什么Crockford说第二个版本更好。
来自http://javascript.crockford.com/code.html
当要立即调用函数时,整个调用 表达应该用parens包裹,以便明确表示 产生的价值是功能的结果,而不是 功能本身。
为了扩展一点,JavaScript并不是我们所知道的强类型语言。将function
推入变量并不罕见,事实上,将函数推送到var
比将来自立即调用的匿名函数的值推送更为常见。
var whatAmI = function () { return 5; }; // You're a function!
VS
var whatAmI = (function () { return 5;}()); // You're the number 5!
因此,当您在调用而不是设置对函数的引用时,在代码中使用一点语法糖就可以清楚地显示出来。
不要让那些抱怨它很难的人陷入困境^ H ^ H ^ H ^ H ^ H无法从JSLint中分离Douglas Crockford的意见。他们是对的,这很好!
在一个足够大的项目中,你为什么 不同意他?我从来没有见过克罗克福德需要客观上错误的东西。 JSLint中的所有规则都是可以说是好的规则,共享项目中代码的标准化通常是非常好的。他免费教你好(!坏?)的习惯。值得一玩。