一些 JavaScript
语句必须用分号结束,所以会被自动分号补全(ASI
)影响
- 空语句
let
、const
、变量声明import
、export
、模块定义- 表达式语句
debugger
continue
、break
、throw
return
ECMAScript
提到自动分号补全的三个规则
- 当出现一个不允许的
行终止符
或“}
”时,会在其之前插入一个分号:1
2
3
4
5{ 1 2 } 3
// 将会被ASI转换为
{ 1 2 ;} 3; - 当捕获到标识符输入流的结尾,并且无法将单个输入流转换为一个完整的程序时,将在结尾插入一个分号:
1
2
3
4
5
6
7
8// 由于在 b 和 ++ 之间出现了一个行终止符,所以 ++ 未被当成变量 b 的后置运算符。
a = b
++c
// 将被ASI转换为
a = b;
++c; - 当语句中包含语法中的限制产品后跟一个行终止符的时候,将会在结尾插入一个分号。带
这里没有行终止符
规则的语句有:- 后置运算符(
++
和--
) continue
break
return
yield
,yield*
module
1
2
3
4
5
6
7return
a + b
// 将被ASI转换为
return;
a + b;
- 后置运算符(
参考文档
自动分号补全