3
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),然后ifor循环中计算对象中的所有元素elem

4

3 回答 3

6

这只是将声明分开。

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

是相同的

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

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

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

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

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

由于变量的范围是函数(或全局)而不是块,所以它本来是完全相同的。

于 2013-01-16T08:05:25.250 回答
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 中是一样的,但你不需要将变量放在列表中。

于 2013-01-16T08:06:02.167 回答
1

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

var elements=document.getElementsByTagName('*');
var i;
于 2013-01-16T08:07:40.223 回答