这个例子引自javascript.info代码机构一章,对分号的知识进行一个扩充。
- 在大多数情况下,换行意味着一个分号。但是“大多数情况”并不意味着“总是”!
有很多换行并不是分号的例子,例如
alert(3 +
1
+ 2);
代码输出 6,因为 JavaScript 并没有在这里插入分号。显而易见的是,如果一行以加号 "+" 结尾,那么这是一个“不完整的表达式”,不需要分号。所以,这个例子得到了预期的结果。
但存在 JavaScript 无法确定是否真的需要自动插入分号的情况。
运行这段代码, 其结果会弹出显示1 然后2
[1, 2].forEach(alert)
现在我们在代码前面插入一个 alert 语句,并且不加分号
alert("There will be an error")
[1, 2].forEach(alert)
现在,如果我们运行代码,只有第一个 alert 语句的内容被显示了出来,随后我们收到了一个错误!
但是,如果我们在第一个 alert 语句末尾加上一个分号,就工作正常了;
alert("All fine now");
[1, 2].forEach(alert)
无分号的变体(variant)会出现报错,是因为 JavaScript 并不会在方括号 [...] 前添加一个隐式的分号。
所以,因为没有自动插入分号,第一个例子中的代码被视为了一条简单的语句,我们从引擎看到的是这样的:
alert("There will be an error")[1, 2].forEach(alert)
但它应该是两条语句,而不是一条。这种情况下的合并是不对的,所以才会造成错误。
版权属于:ic翼
本文链接:https://dodd.bingyishow.top/Technical-article/173.html
您必须遵守 署名-非商业性使用-相同方式共享 CC BY-NC-SA 使用这篇文章
2 条评论
参考一下
参考一下