《编写可维护的JavaScript》——1.2 语句结尾-阿里云开发者社区

开发者社区> 开发与运维> 正文

《编写可维护的JavaScript》——1.2 语句结尾

简介:

本节书摘来自异步社区《编写可维护的JavaScript》一书中的第1章,第1.2节,作者: 【美】Nicholas C. Zakas 译者: 李晶 , 郭凯 , 张散集 更多章节内容可以访问云栖社区“异步社区”公众号查看。

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默认都会有警告。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章