没有应该不应该,只有你自己喜欢不喜欢。JavaScript 语法长得 C-like 不代表它本质上和 C 是一类语言,所有直觉性的 “当然应该加分号” 都是保守的、未经深入思考的草率结论。后来新设计的语言里可选分号的多得去了,光是 “可以加分号但是大家都不加” 的语言就有:Go, Scala, Ruby, Python, Swift, Groovy...
至于说 “很难总结什么时候加不加”,其实真的很简单。真正会导致上下行解析出问题的 token 有 5 个:括号(),方括号[],正则开头的斜杠/,加号+,减号-。我还从没见过实际代码中用正则、加号、减号作为行首的情况,所以总结下来就是一句话:一行开头是括号或者方括号的时候加上分号就可以了,其他时候全部不需要。其实即使是这两种情况,在实际代码中也颇为少见。
另外,restricted production 这个东西(也就是导致 return 后面换行会自动插入分号的机制),不管你加不加分号你都是得搞懂了才能不被坑的,和加不加分号没有什么关系。
更多细节,可以看我曾经给过的一个 talk:Hacking Semicolons by Evan You
最后,上点代码好了,Vue.js 的代码全部不带分号:yyx990803/vue · GitHub
另外说到工具,我确实写了一个,全自动帮你批量添加或者删除分号:yyx990803/semi · GitHub 做成 Git pre-commit hook,选择你自己喜欢的风格就可以。

总结:

1. 自己书写代码的时候: 一条完整的语句加分号, 函数声明不加分号

// 1.  加分号的语句
var jason = "zeng";
var eason = function () {
// 其他语句...
};
(function($) {
// 其他语句 ...
})(jQuery);
++a;
b++; // 2. 不加分号的声明
function myfunction() {
// 其他语句 ...
}

2. 结合别人代码的时候: 发现他人有不加分号的特点的时候, 自己在在语句前面加分号

;(function($) {
// 其他语句 ...
})(jQuery); ;++a;

3. return 不能单独占一行

var g1 = function () {
return "test";
} var g2 = function () {
return {
a: 1,
b: 2
}
} var g3 = function () {
return [
"one",
"two"
];
}

JavaScript 分号使用总结的更多相关文章

  1. 【转】javascript 分号问题

    javascript的分号代表语句的结束符,但由于javascript具有分号自动插入规则,所以它是一个十分容易让人模糊的东西,在一般情况下,一个换行就会产生一个分号,但实际情况却不然,也就是说在ja ...

  2. javascript 分号理解

    javascript自动填补分号的规则 在说要不要写分号之前,先了解一下javascript自动填补分号的规则. 在<javascript权威指南>中有一段话“如果一条语句以“(”.“[” ...

  3. Javascript分号,加还是不加?

    关于这个问题,网上已经有很多人讨论过了,我先说说自己对这个问题的回答:加!(但非必须) 有些人写代码,懒得加分号,除非是迫不得已才勉强放一个分号上去.如果你可以保证你写的代码不出现任何 bug,那当然 ...

  4. webstorm javascript 分号提示如何自动补全或去掉?

    转载于: https://segmentfault.com/q/1010000006930809?_ea=1180552 如图片显示,每行末尾都会提示你加上分号,如何让IDE自动完成这个操作或者取消这 ...

  5. auto semicolon insertion 自动分号补齐的坑

    今天发现js自动分号补齐的坑,来看如下两段代码: function Hello(){ return { name: ’JavaScript’ }; } alert(Hello()); //输出unde ...

  6. 初识javaScript(慕课网学习笔记)

    js输出 window.alert() 警告框 document.write() 写到HTML文档中 innerHTML 写到HTML元素 console.log() 写到浏览器的控制台 <!D ...

  7. php笔记篇(二)

    mysql中key .primary key .unique key 与index区别(http://www.manongjc.com/article/1487.html) php is_file() ...

  8. php 编程笔记分享 - 非常实用

    php opendir()列出目录下所有文件的两个实例 php opendir()函数讲解及遍历目录实例 php move_uploaded_file()上传文件实例及遇到问题的解决方法 php使用m ...

  9. ECMAScript 5.0 基础语法(上)

    银子: 一般来说,一门编程语言的基础语法都是大同小异的.比如,python的基础语法,包括:数据类型,变量,作用域,运算符,流程控制(if...else...语句),循环,编码,数据类型的操作(增删改 ...

随机推荐

  1. ubuntu 通过ssh上传/下载服务器文件

    1.用ssh登录远程ubuntu主机 (主机ip为:1.2.3.4;用户名:username) ssh username@1.2.3.4 2.从远程ubuntu主机copy文件/文件夹到本地(scp) ...

  2. DELL E7240超极本

    一.图片展示 1.整体图 2.扩展坞的后卡槽附带挡板 3.电源线 4.边框指示灯 5.平躺展示摄像头 二.参数配置 1.i5的 2.i7的 3.手写 处理器:英特尔四代处理器    i7-4600U双 ...

  3. 零基础学Cocos2d-X 3.0 - 04

    忙完两个项目后.最终有时间继续学习Cocos2d-X 了. 常听人说.Cocos2d-X 有四个类是最经常使用的,包含: Director 类----> 导演 Scene 类 -----> ...

  4. 在IIS服务上发布网站

    一.打开控制面板中的“管理工具” 二.打开IIS管理器 三.右键网站,选择“新建网站”

  5. oracle计算两个日期的时间差时分秒

    Oracle函数可以实现诸多的功能,下面就介绍使用oracle函数计算时间差的实现方法. 两个Date类型字段:START_DATE,END_DATE,计算这两个日期的时间差(分别以天,小时,分钟,秒 ...

  6. 【转】Ubuntu13.04配置:Vim+Syntastic+Vundle+YouCompleteMe

    原文网址:http://www.cnblogs.com/csuftzzk/p/3435710.html 序言 使用Ubuntu和vim已经有一段时间了,对于Vim下的插件应用,我总是抱着一股狂热的态度 ...

  7. Sql Server中执行计划的缓存机制

    Sql查询过程 当执行一个Sql语句或者存储过程时, Sql Server的大致过程是 1. 对查询语句进行分析,将其生成逻辑单元,并进行基本的语法检查 2. 生成查询树(会将查询语句中所有操作转换为 ...

  8. Asp.net MVC 出现“Failed to map the path '/'.”错误

    Server Error in '/' Application. Parser Error Description: An error occurred during the parsing of a ...

  9. NPOI-Excel系列-1002.创建带有Document Summary Information和Summary Information的Excel文件

    1. using NPOI.HSSF.UserModel; using NPOI.HPSF; using NPOI.POIFS.FileSystem; using Microsoft.VisualSt ...

  10. IDEA无法下载plugin的解决办法

    有些时候我们在用IDEA安装plugins的时候,会因为各种原因搜索不到想要的依赖,或者搜索到却无法安装,针对这个问题,现在这里有两种方法可以尝试一下. 第一种: 找到settings->sys ...