自动插入分号的用处是:如果你代码写的不规范,甚至分号都没写,那么js解释器会帮你自动断句。就好比一个人写文章,没带标点符号。
基本上遵循贪婪原则,意思是只要能解释的通,就一直解释。众所周知,解释语义的基本单位是token, 在解释的过程中,如果遇到一个无法继续解释语义的token,那么就在该token前自动插入分号(;),表示当前语义结束。
规则
- 在解释某个token时,但前token不符合任何语义,如果该token满足一下条件,则会在当前token前自动插入分号;
- 当前token与前一个token由至少一个换行符分割
- 但前token是 } ```javascript { 1 2 } 3
// 会被转换成 { 1 ;2 ;} 3;
// ast [ { “type”: “BlockStatement”, “start”: 1, “end”: 12, “body”: [ { “type”: “ExpressionStatement”, “start”: 3, “end”: 4, “expression”: { “type”: “Literal”, “start”: 3, “end”: 4, “value”: 1, “raw”: “1” } }, { “type”: “ExpressionStatement”, “start”: 9, “end”: 10, “expression”: { “type”: “Literal”, “start”: 9, “end”: 10, “value”: 2, “raw”: “2” } } ] }, { “type”: “ExpressionStatement”, “start”: 13, “end”: 14, “expression”: { “type”: “Literal”, “start”: 13, “end”: 14, “value”: 3, “raw”: “3” } } ] ```
参考
https://262.ecma-international.org/7.0/#sec-rules-of-automatic-semicolon-insertion
https://stackoverflow.com/questions/2846283/what-are-the-rules-for-javascripts-automatic-semicolon-insertion-asi