【问题标题】:About JSLint behaviour关于 JSLint 行为
【发布时间】:2014-08-28 14:23:38
【问题描述】:

谁能解释一下为什么 JSLint 接受这种风格:

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

但不喜欢这个:

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

我知道 JSLint 有一些极其严格的规定,但至少这些规定中的大多数(据称)都有某种目的。在这种特殊情况下,我只是无法弄清楚这个目的是什么。

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

【问题讨论】:

  • 不喜欢?它给出的错误是什么?
  • @PaoloMoretti 在评论中的链接摘要:<sarcasm>JSLint 的创建者是一个恶意的人,不喜欢为其添加选项,并希望每个人都以相同的方式编写代码他们会在确实没有任何区别的情况下这样做。</sarcasm>
  • JSLint 实际上是 Douglas Crockford 关于正确编写 JavaScript 代码的观点的体现。他确实对每件小事都有理由,但归根结底,这仍然只是他的意见。
  • 看看这个视频:youtube.com/watch?v=eGArABpLy0k

标签: javascript jslint


【解决方案1】:

好的,这与most recent jslint-tagged question before this one 几乎完全相同,后者还询问防御性前导分号。记得在问之前在你的标签中搜索!

也就是说,让我们免费通行证 - 另一个问题没有可接受的答案,所以你去吧。 ;^)(也就是说,我们应该关闭其中一个作为骗子。)

这就是 Crockford 说第二个版本更好的原因。

来自http://javascript.crockford.com/code.html

当一个函数被立即调用时,整个调用 表达式应该用括号括起来,以便清楚地表明 产生的价值是函数的结果,而不是 函数本身。

稍微扩展一下,正如我们所知,JavaScript 并不是一种强类型语言。将 function 推送到变量中并不少见,事实上,将函数推送到 var 可能比立即调用的匿名函数中的值更常见。

var whatAmI = function () { return 5; };    // You're a function!

对比

var whatAmI = (function () { return 5;}()); // You're the number 5!

因此,当您调用而不是设置对函数的引用时,值得在代码中添加一点语法糖以清楚地显示出来。

不要被那些抱怨很难将Douglas Crockford 的意见与 JSLint 分开的人所困扰^H^H^H^H^H。他们是对的,这很好!

在一个足够大的项目中,你为什么不得不不同意他的意见?我从未见过 Crockford 需要一些客观错误的东西。 JSLint 中的所有规则可以说都是好的,共享项目中的代码标准化通常是一件非常好的事情。他免费教你好的(!坏的?)习惯。值得一玩。

【讨论】:

    猜你喜欢
    • 2020-04-22
    • 2012-09-14
    • 2011-07-24
    • 2015-10-31
    • 1970-01-01
    • 2012-07-28
    • 2012-02-24
    • 2012-03-18
    • 1970-01-01
    相关资源
    最近更新 更多