关于JSLint行为

时间:2014-08-28 14:23:38

标签: javascript jslint

有人可以解释为什么JSLint接受这种风格:

(function () { /* .... */ }());

但不喜欢这个:

(function () { /* .... */ })();

我知道JSLint有一些非常严格的规定,但至少大部分规则都有(据称)某种目的。在这种特殊情况下,我无法弄清楚这个目的是什么。

(我不想在这里争论,我只是想了解原因。)

1 个答案:

答案 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中的所有规则都是可以说是好的规则,共享项目中代码的标准化通常是非常好的。他免费教你好(!坏?)的习惯。值得一玩。