关于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解析器会自动添加分号
经验分享 程序员 微信小程序 职场和发展