我读过Crockford的JavaScript: The Good Parts,并使用了他的验证器JSLint。我有时会想知道他的建议背后的理由。以下列出了我想要证实的例子。
如果不包含"use strict";
,为什么JSLint会发出错误信号? [见this SO thread。]
为什么函数中的变量声明应该使用单个var
来完成? [见this SO thread。]
为什么我们需要在function
中的()
和function ()
之间加一个空格?
为什么我们不能使用continue
?
++
和--
出了什么问题?
为什么我们不能使用逗号运算符,
(for
语句的初始化和递增部分除外)? [见this blog post。]
为什么每个语句都以;
结尾? [见this blog post。]
答案 0 :(得分:30)
答案 1 :(得分:12)
你是对的,克罗克福德并不经常证实他的做法。
例如,只要您知道,我认为将var
定义在范围顶部之外的其他位置就可以了。无论如何,Javascript会将它们提升到范围的顶部。此外,我认为它实际上是有益的,因为您可以轻松地选择变量的初始值,您只需要查找var
。
如果您知道如何使用它们,我也认为开关案例的突破非常有用。特别是对于写一个非常复杂的状态机的东西。
if
和for
后跟一个语句,没有花括号也没关系。几十年来,人们一直以这种方式写作C.
如果您知道javascript语句结束的内容,则也不需要分号。分号插入不是随机的,与普遍的看法相反,它不是难以辨认的。
Crockford以破坏正则表达式而闻名......这太糟糕了。非常强大(和快速)的词法分析器可以使用正则表达式作为lexemes / rules / grammar / whathaveyou来编写。
在大多数情况下,克罗克福德知道他在说什么,但不要将他的个人风格视为福音。在我看来,这是非常不成立的。我见过的一些最好的javascript编码器与Crockford在代码方面的风格直接对立。
编辑:我不明白为什么这个问题被关闭了。它可以客观地讨论,值得一谈。