证明克罗克福德声称

时间:2011-08-05 02:01:09

标签: javascript jslint

我读过Crockford的JavaScript: The Good Parts,并使用了他的验证器JSLint。我有时会想知道他的建议背后的理由。以下列出了我想要证实的例子。


  1. 如果不包含"use strict";,为什么JSLint会发出错误信号? [见this SO thread。]

  2. 为什么函数中的变量声明应该使用单个var来完成? [见this SO thread。]

  3. 为什么我们需要在function中的()function ()之间加一个空格?

  4. 为什么我们不能使用continue

  5. ++--出了什么问题?

  6. 为什么我们不能使用逗号运算符,for语句的初始化和递增部分除外)? [见this blog post。]

  7. 为什么每个语句都以;结尾? [见this blog post。]

2 个答案:

答案 0 :(得分:30)

答案 1 :(得分:12)

你是对的,克罗克福德并不经常证实他的做法。

例如,只要您知道,我认为将var定义在范围顶部之外的其他位置就可以了。无论如何,Javascript会将它们提升到范围的顶部。此外,我认为它实际上是有益的,因为您可以轻松地选择变量的初始值,您只需要查找var

如果您知道如何使用它们,我也认为开关案例的突破非常有用。特别是对于写一个非常复杂的状态机的东西。

iffor后跟一个语句,没有花括号也没关系。几十年来,人们一直以这种方式写作C.

如果您知道javascript语句结束的内容,则也不需要分号。分号插入不是随机的,与普遍的看法相反,它不是难以辨认的。

Crockford以破坏正则表达式而闻名......这太糟糕了。非常强大(和快速)的词法分析器可以使用正则表达式作为lexemes / rules / grammar / whathaveyou来编写。

在大多数情况下,克罗克福德知道他在说什么,但不要将他的个人风格视为福音。在我看来,这是非常不成立的。我见过的一些最好的javascript编码器与Crockford在代码方面的风格直接对立。

编辑:我不明白为什么这个问题被关闭了。它可以客观地讨论,值得一谈。