JS语句后面到底要不要加分号

265 阅读1分钟

加与不加是风格问题,风格争议不需要有个定论。关键的问题在于如何“争论”,处理好冲突,学会组织语言减少争议是最重要的。因为分号问题在社区内部造成了很多况日持久的口水战,这些口水战是社区的损失……因为大家在这个时候可以写更多的代码带来更多的功能。 类似的问题还有AMD的module,有的库选择兼容AMD,有的人不愿意。公认结论是应该尊重作者的选择,不要因为这些风格问题而fork。module loader应该设法绕过这些问题,提供兼容的解决方案。

但是下面两种情况下必须要加分号

1.在以 “(“、”[“ 、”/“、”+”、”-“ 开头的语句前面都加上一个分号.

举个例子:在结构赋值中,把数组中的单元格赋值给一列变量前面必须得加分号,不然会影响上下语句,会报错。

Snipaste_2022-04-23_21-29-19.png

Snipaste_2022-04-23_21-29-38.png
[a,b,c]前面不加分号,就相当于写成let c = 0[a,b,c],这样浏览器就会解析报错

2.匿名函数前面要加分号

举个例子:两个匿名函数之间不加分号就会报错

1.png

Snipaste_2022-04-23_21-34-38.png

所以以后遇到结构赋值和匿名函数的时候一定要注意分号的问题 正确的写法:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

  <script>
    let a = 0
    let b = 0
    let c = 0
      ; (function () { console.log(123) }());
    (function () { console.log(456) }())
      ;[a, b, c] = [9, 8, 7]
    console.log(`a:${a},b:${b},c${c}`)
  </script>
</body>

</html>

执行结果:

Snipaste_2022-04-23_21-41-11.png