本节书摘来自异步社区《编写可维护的JavaScript》一书中的第1章,第1.2节,作者:【美】Nicholas C. Zakas著,更多章节内容可以访问云栖社区“异步社区”公众号查看
有一件很有意思且很容易让人困惑的事情,那就是JavaScript的语句要么独占一行,要么以分号结尾。类似C的编程语言,诸如C++和Java,都采用这种行结束写法,即结尾使用分号。下面这两段示例代码都是合法的JavaScript。
// 合法的代码 var name = "Nicholas"; function sayName() { alert(name); } // 合法的代码,但不推荐这样写 var name = "Nicholas" function sayName() { alert(name) }有赖于分析器的自动分号插入(Automatic Semicolon Insertion,ASI)机制,JavaScript代码省略分号也是可以正常工作的。ASI 会自动寻找代码中应当使用分号但实际没有分号的位置,并插入分号。大多数场景下ASI都会正确插入分号,不会产生错误。但ASI的分号插入规则非常复杂且很难记住,因此我推荐不要省略分号。看一下这段代码。
// 原始代码 function getData() { return { title: "Maintainable JavaScript", author: "Nicholas C. Zakas" } } // 分析器会将它理解成 function getData() { return; { title: "Maintainable JavaScript", author: "Nicholas C. Zakas" }; }在这段代码中,函数getData()的本意是返回一个包含一些数据的对象。然而,return之后新起了一行,导致return后被插入了一个分号,这会导致函数返回值是undefined。可以通过将左花括号移至与return同一行的位置来修复这个问题。
// 这段代码工作正常,尽管没有用分号 function getData() { return { title: "Maintainable JavaScript", author: "Nicholas C. Zakas" } }ASI在某些场景下是很管用的,特别是,有时候ASI可以帮助减少代码错误。当某个场景我们认为不需要插入分号而ASI认为需要插入时,常常会产生错误。我发现很多开发人员,尤其是新手们,更倾向于使用分号而不是省略它们。
Douglas Crockford针对JavaScript提炼出的编程规范(下文统称为Crockford的编程规范)推荐总是使用分号,同样,jQuery核心风格指南、Google的JavaScript风格指南以及Dojo编程风格指南都推荐不要省略分号。如果省略了分号,JSLint和JSHint默认都会有警告。
相关资源:敏捷开发V1.0.pptx