Javascript中变量赋值后的逗号

时间:2013-01-16 08:04:21

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

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中的所有元素。

3 个答案:

答案 0 :(得分:5)

简单地将声明分开。

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

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

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

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

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

在我看来,这是最好的,因为i的目的是显而易见的。

由于变量的范围是函数(或全局)而不是块,因此它将完全相同。

答案 1 :(得分: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){     //做一点事 }

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

    my ($var1, $var2);
    

    在JavaScript中,它是相同的,但您不需要将变量放在列表中。

答案 2 :(得分:1)

ivar语句的一部分..因此它只是创建一个新变量... 你的代码与

相同
var elements=document.getElementsByTagName('*');
var i;