美文网首页
有分号和没分号的区别

有分号和没分号的区别

作者: zhulichao | 来源:发表于2020-07-24 09:04 被阅读0次

    JavaScript 语句后应该加分号么?

    通常情况下,解释器会自动添加分号,但有些时候不加分号还是容易引起解析错误,特别是在代码压缩的情况下,所以出于严谨考虑,还是推荐在语句结束时添加分号。还有不要把分号单单认为只是用来结束某段代码,它还可以用来隔离某段代码和别人划清界限。

    如果遇到无法解析下去则javascript解析器会尝试给其添加一个分号,如果还是解析不了则报错。javascript解析器会尽可能多的去匹配,但也有几个例外,它们是retrun、break、continue,当javascript解析器解析到这几个关键字时,它不会把换行后的内容当成是自身的,而是直接在换行之前添加分号。

    JavaScript自动加分号规则,有3条:

    当有换行符(包括含有换行符的多行注释),并且下一个token没法跟前面的语法匹配时,会自动补分号。
    当有}时,如果缺少分号,会补分号。
    当程序源代码结束时,如果缺少分号,会补分号。

    真正会导致上下行解析出问题的 token 有5个:括号,方括号,正则开头的斜杠,加号,减号。实际代码中几乎没有用正则、加号、减号作为行首的情况,所以一行开头是括号或者方括号的时候加上分号就可以了,其它时候全部不需要。

    在return、break、continue、后自增、后自减五种语句中,换行符可以完全替代分号的作用。
    var if do while for continue break return with switch throw try debugger几种关键字开头的语句,以及空语句,上一行加不加分号影响不大。
    凡表达式语句和函数表达式语句,后面不加分号非常危险,情况极其复杂。
    ([开头的语句,前面不加分号极度危险。

    ```
    // 例子1
    var a = 10;
    var b = 5;
    var c = a + b
    (a + b).toString() // b is not a function,同 var c = a + b(a + b).toString();
    
    // 例子2
    function test(){
      return 
      123;
    }
    console.log(test()); // undefined,同 return;
    ```
    

    相关文章

      网友评论

          本文标题:有分号和没分号的区别

          本文链接:https://www.haomeiwen.com/subject/slxjhktx.html