关于JS是否添加分号问题
一、关于分号添加
javascript并不严格使用分号,当有一个需要分号的地方时,javaScript会在解析时自动添加,执行此操作的过程为自动插入分号。
二、自动插入分号规则
1、javaScript并不是在所有换行处都填补分号,只有在缺少了分号就无法解析代码的时候,javaScript才会填补分号。
2、在解析源代码期间,要是发现以下特定的情况时,javaScript解析器将会自动添加分号:
如果一条语句以 ( [ { / + - 这几个符号开始,那么它极有可能和前面一条语句合在一起解析
(1)当下一行代码开始破坏前一行的代码时(javaScript代码可以写在多行中)。 (2)当下一行以 } 开头时,或者以 } 结束闭合当前代码块时 (3)当解析达到源代码文件的末尾时 (4)当前行return 语句后面紧跟着换行时 (5)当前行break语句后面紧跟着换行时 (6)当前行throw语句后面紧跟着换行时 (7)当前行continue语句后面紧跟着换行时
三、关于填写分号的某些特殊的例子
const hey = hey const you = hey const heyYou = hey + + you //会因为此处未添加分号而报错 [h,e,y].forEach((a) => console.log(a)) //这里将收到错误 TypeError: Cannot read property forEach of undefined , 因为基于规则,会将javaScript代码解析为 const hey = hey const you = hey const heyYou = hey + + you[h,e,y].forEach((a) => console.log(a))
1 + 1
-1 + 1 === 0? console.log(0) : console.log(2);
//结果显示为2 因为javaScrupt会将代码解析为:
1 + 1 - 1 + 1 === 0? console.log(0) : console.log(2);
var //这一行不会自动插入分号,因为下一行的代码不会破坏当前行的代码
a = 1 //这一行会自动插入分号
let b = 2
//下面的代码会被解析为: a = b(function(){...}) ()
let a = 2
a = b
(function(){
console.log(a);
})()
(() => {
return
{
color:white
}
})()
//本来这个立即调用函数的返回值是一个包含color属性的对象
//但是事实并非如此,它会返回一个undefined,因为javaScript会在return后插入分号
//所以,应该写成
(() => {
return {
color:white
}
})()
//这样当当前行return语句后面紧跟着换行时,javaScript解析器会自动添加分号
