Closed azl397985856 closed 4 years ago
会报错。
因为 JS 代码执行的一般规则是,“能合并就合并”,因为 a = 123
没有用 ;
结束,所以 JS 引擎会看它能不能和下一行合并起来一起运行。因为下一行的 /
可以被理解为数学计算“除以”,所以 JS 引擎会尝试执行 a = 123/hi
并报错。
浏览器有时候会在行末尾(行分隔符后)自动添加分号(;),但是有时候不会。具体可以看下ECMA标准:http://ecma-international.org/ecma-262/5.1/#sec-7.9.2
对于这道题来说,并不会。而是会被解析为:
a = 123 / hi/g.exec('hi lucifer');
即123 除以 hi 除以 g.exec('hi lucifer')。
更本质上来说,LineTerminator 后的第一个非空白、非注释字符是斜线(/),并且这个句法上下文允许除法或除赋值运算符。
其中
LineTerminator ::
<LF>
<CR>
<LS>
<PS>
上面提到了两个字“允许”。 那不允许是什么情况呢?eg:
a = //
/hi/g.exec('hi lucifer');
如上是不会自动连接的,原因是加入自动连接那么会不合法。eg:
a = /// hi/g.exec('hi lucifer');
因此手动添加分号(;)是一个好习惯。即:
a = 123;
/hi/g.exec('hi lucifer');
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.