javaScript中什么时候用分号;

javaScript中什么时候用分号“;”?

参考(一)译文:JavaScript分号使用指南

参考(二)《JavaScript权威指南》(第六版)P30

(1)在JavaScript中如果语句各自独占一行,通常可以省略语句之间的分号(程序结尾或右花括号“}”之前的分号也可以省略)。

(2)JavaScript并不是在所有换行处都填补分号:只有在缺少了分号就无法正确解析代码的时候,JavaScript才会填补分号。(懒惰性)

        var a
        a
        =
        3
        console.log(a)

JavaScript将其解析为:

var a;a=3;console.log(a);

JavaScript给第一行换行处添加了分号,因为如果没有分号,JavaScript就无法解析代码var a a。第二个a可以当做一个语句“a;”,但JavaScript并没有给第二行结尾填补分号,因为它可以和第三行内容一起解析为“a=3;”。

依赖JavaScript的自动填补分号很可能导致一些意想不到的问题:

        var y=x+f
        (a+b).toString()

看起来像两条独立的语句,但是第二行的圆括号和第一行的f组成一个函数调用,JavaScript会把这段代码看做:

var y=x+f(a+b).toString();

 而这段代码的本意并不是这样。为了能让上述代码解析为两条不同的语句,必须手动填写行位的显式分号。

如果当前语句和下一行的语句无法合并解析,JavaScript则在第一行后填补分号,这是通用规则,但是有两个例外。

第一个例外:在涉及return、break、continue语句的场景中。如果这三个关键字后紧跟着换行,JavaScript会在换行处填补分号。

        return
        true;

JavaScript会解析成

  return;true;

 第二个例外是涉及“++”“--”运算符的时候。这些运算符可以作为表达式的前缀,也可以当做表达式的后缀。如果将其用作后缀表达式,它和表达式应当在同一行,否则,行位将填补分号,同时“++”或“--”将会作为下一行代码的前缀操作符并与之一起解析。

        x 
        ++
        y

将会解析为

x;++y

 而不是

x++;y

 

你可能感兴趣的:(Javascript,分号)