【问题标题】:Comma after variable assignment in JavascriptJavascript中变量赋值后的逗号
【发布时间】:2012-12-30 11:56:09
【问题描述】:
function ReplaceContentInContainer(matchClass,content)
    {
    var elems = document.getElementsByTagName('*'), i;
    for (i in elems)
        {
        if((" "+elems[i].className+" ").indexOf(" "+matchClass+" ") > -1)
            {
            elems[i].innerHTML = content;
            }
        }
    }

我试图弄清楚逗号在变量赋值('*'), i; 中的作用 以及 for (i in e) 循环中的含义。

我最好的猜测是e 被分配给文档节点中的所有元素以及i。那么这是否意味着i 是数组e 中元素数量的计数或引用(它是一个数组吗?)?

编辑: 好的。它只是实例化变量(i)然后i,在for 循环中,计算对象elem 中的所有元素。

【问题讨论】:

    标签: javascript arrays variables for-loop variable-assignment


    【解决方案1】:

    这只是将声明分开。

    var elems = document.getElementsByTagName('*'), i;
    

    一样
    var elems = document.getElementsByTagName('*');
    var i;
    

    一个更简洁,另一个可能被视为更具可读性。

    在您的确切情况下,您可以使用

    var elems = document.getElementsByTagName('*');
    for (var i in elems)
    

    在我看来,这将是最好的,因为 i 的目的很明显。

    因为变量的作用域是函数(或全局)而不是块,所以它应该是完全相同的。

    【讨论】:

      【解决方案2】:

      该逗号是因为您在本地范围内定义了变量i,它只是var 语句的一部分。如果没有逗号,i 将是一个全局变量。

      你的说法是这样的:

      var elems = document.getElementsByTagName('*');
      var i;
      

      如果你使用工具对代码质量进行静态分析,例如 JSLint,它会强制你编写:

      var elems = document.getElementsByTagName('*'),
          i;
      

      有几个原因:

      1. 你定义了两个变量(所以你没有全局变量)
      2. 你没有多余的var(你写的少了……:-))
      3. 您的代码比单行版本更具可读性
      4. 您在同一个地方定义所有变量,这比:

        for (var i in elems) { //做一点事 }

      perl中有类似的概念,例如:

      my ($var1, $var2);
      

      在 JavaScript 中也是如此,但您不需要将变量放在列表中。

      【讨论】:

        【解决方案3】:

        ivar 语句的一部分。所以它只是创建一个新变量... 你的代码和

        一样
        var elements=document.getElementsByTagName('*');
        var i;
        

        【讨论】:

          猜你喜欢
          • 2012-07-25
          • 1970-01-01
          • 1970-01-01
          • 2012-09-28
          • 2016-03-26
          • 2015-01-14
          • 2022-08-17
          • 2014-03-22
          相关资源
          最近更新 更多