1.2 语句结尾
有一件很有意思且很容易让人困惑的事情,那就是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默认都会有警告。
时间: 2024-11-02 13:50:55