zoukankan      html  css  js  c++  java
  • 关于javascript的分号

    javascript的分号代表语句的结束符,但由于javascript具有分号自动插入规则,所以有部分人以为不用写,让人比较模糊不清,在一般情况下,一个换行就会产生一个分号,但实际可能不是这样,也就是说在javascript中换行可能产生分号,也可能不产生,是否自动插入分号,主要看上下行。

    在 ECMAScript 中对分号自动插入规则也有相应的解释:空语句,变量语句,表达式语句,do-while 语句,continue 语句,break 语句,return 语句,以及 throw 语句,这些确定的ECMAScript语句必须以分号结束。这些分号可以总是明确地出现在源代码文本中。为方便起见,在特定的情况下,源代码文本中的这些分号可以被省略。也就是说这些语句的结尾是不需要硬性的输入分号结尾,javascript会自动插入语句结束处。

    请看如下

    return引起的血案

    function test(){
       var a = 1;
       var b = 2;
       return //会自动插入分号
           (
             a+b
           )
    };
    alert(test());

    一个返回a+b值的函数,初看没任何问题,但运行alert的结果却是undefined。根据分号的自动插入规则,return 语句后面如果有换行就会自动插入分号,没有返回值也就比较好理解了。如果需要换行的话,可以这样:

    function test(){
       var a = 1;
       var b = 2;
       return (
               a+b
              )
    };
    alert(test());

    两个闭包之间的亲亲偶偶

    (function (){
      var a;
    })() //不会自动插入分号
    (function (){
      var b;
    })()

    很诡异,解释不了,谁能告诉我~

    for语句头中的两个分号,不自动插入分号

    for( var a=1,b=10 //不会自动插入分号
             a<b //不会自动插入分号
             a++
       )
    {}

    ECMAScript对以上也有解释:将分号解释为空语句和在for语句中的()中不自动插入分号是特例,是不属于自动插入规则管辖的。

    javascript虽然是弱类型语言,ECMAScript的分号自动插入规则也让人难以理解透彻。但养成良好的代码书写习惯,手动插入分号,养成习惯,就能避免这些问题,同时会在程序调试,打包压缩,代码的阅读上对自己对他人都有不小的帮助。

    同时ECMAScript还给程序员一些忠告:

    ++ 或 — 应和其操作数出现在同一行。 
    return 或 throw 语句中的表达式应和return 或 throw 出现在同一行。 
    break 或 continue 语句中的标签应和break 或 continue 出现在同一行。

  • 相关阅读:
    NFS
    Linux ISO镜像挂载
    Python3.6 提示 ModuleNotFoundError: No module named '_ssl' 模块问题
    mysql 5.7 ERROR 1054(42S22) Unknown column 'password' in ‘field list’ 报错
    Redis + keepalived 高可用行配置检测脚本
    Linux 文件大小查找排序
    查看 Centos 7 的MAC 地址
    Discuz 论坛 (LAMP环境)
    SVN
    systemctl
  • 原文地址:https://www.cnblogs.com/taoze/p/3064052.html
Copyright © 2011-2022 走看看