JavaScript 分号使用总结
没有应该不应该,只有你自己喜欢不喜欢。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 分号使用总结的更多相关文章
- 【转】javascript 分号问题
javascript的分号代表语句的结束符,但由于javascript具有分号自动插入规则,所以它是一个十分容易让人模糊的东西,在一般情况下,一个换行就会产生一个分号,但实际情况却不然,也就是说在ja ...
- javascript 分号理解
javascript自动填补分号的规则 在说要不要写分号之前,先了解一下javascript自动填补分号的规则. 在<javascript权威指南>中有一段话“如果一条语句以“(”.“[” ...
- Javascript分号,加还是不加?
关于这个问题,网上已经有很多人讨论过了,我先说说自己对这个问题的回答:加!(但非必须) 有些人写代码,懒得加分号,除非是迫不得已才勉强放一个分号上去.如果你可以保证你写的代码不出现任何 bug,那当然 ...
- webstorm javascript 分号提示如何自动补全或去掉?
转载于: https://segmentfault.com/q/1010000006930809?_ea=1180552 如图片显示,每行末尾都会提示你加上分号,如何让IDE自动完成这个操作或者取消这 ...
- auto semicolon insertion 自动分号补齐的坑
今天发现js自动分号补齐的坑,来看如下两段代码: function Hello(){ return { name: ’JavaScript’ }; } alert(Hello()); //输出unde ...
- 初识javaScript(慕课网学习笔记)
js输出 window.alert() 警告框 document.write() 写到HTML文档中 innerHTML 写到HTML元素 console.log() 写到浏览器的控制台 <!D ...
- php笔记篇(二)
mysql中key .primary key .unique key 与index区别(http://www.manongjc.com/article/1487.html) php is_file() ...
- php 编程笔记分享 - 非常实用
php opendir()列出目录下所有文件的两个实例 php opendir()函数讲解及遍历目录实例 php move_uploaded_file()上传文件实例及遇到问题的解决方法 php使用m ...
- ECMAScript 5.0 基础语法(上)
银子: 一般来说,一门编程语言的基础语法都是大同小异的.比如,python的基础语法,包括:数据类型,变量,作用域,运算符,流程控制(if...else...语句),循环,编码,数据类型的操作(增删改 ...
随机推荐
- windows server 2008 r2 修改远程登入的端口号(3389)
步骤:打开“开始→运行”,输入“regedit”,打开注册表,进入以下路径:[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal ...
- java阳历转农历
package com.reading.task; import java.text.ParseException;import java.text.SimpleDateFormat;import j ...
- Oracle联合查询
select * from teacher--联合查询 --01.union (并集)select tno from teacher where tno>1080 union(select tn ...
- centos7 开放mongodb端口
CentOS 7 默认没有使用iptables,所以通过编辑iptables的配置文件来开启端口是不可以的 CentOS 7 采用了 firewalld 防火墙 如要查询是否开启27019端口则: 1 ...
- 在WPF中使用CefSharp嵌入浏览器(转)
在WPF中使用CefSharp嵌入浏览器 日常开发中,我们需要将一些Web页面嵌入到桌面客户端软件中.下面我们使用CefSharp嵌入浏览器来实现. 首先先介绍一下CefSharp嵌入式浏览器,它 ...
- Git核心概念
Git作为流行的分布式版本管理系统,用好它要理解下面几个核心的概念. 1.Git保寸的是文件完整快照,而不是差异变化或者文件补丁.每次提交若文件有变化则会指向上一个版本的指针而不重复生成副本. Git ...
- centos下安装docker最新版教程
1.通过yum安装需要root或者能sudo的权限 yum包更新到最新$ sudo yum update 添加Docker yum源$ sudo tee /etc/yum.repos.d/docker ...
- hive 处理小文件,减少map数
1.hive.merge.mapfiles,True时会合并map输出.2.hive.merge.mapredfiles,True时会合并reduce输出.3.hive.merge.size.per. ...
- DCI改进,发布后作业乱码不能打开
1.发布后作业不能打开问题,找到com.comsys.net.cn.dci.ui.dialog.PublishesDialog 的960行,改为这样: //以前没有指定文件编码前,采用系统默认编码 / ...
- 异步编程 In .NET(转载)
概述 在之前写的一篇关于async和await的前世今生的文章之后,大家似乎在async和await提高网站处理能力方面还有一些疑问,博客园本身也做了不少的尝试.今天我们再来回答一下这个问题,同时我们 ...