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) をインスタンス化するだけiで、forループ内でオブジェクト内のすべての要素をカウントしますelem

4

3 に答える 3

6

それは単に宣言を分離します。

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

と同じです

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

1 つはより簡潔で、もう 1 つはより読みやすいと見なされる可能性があります。

あなたの正確なケースでは、使用できたはずです

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. あなたのコードは、1行のバージョンよりも読みやすいです
  4. すべての変数を同じ場所で定義すると、次よりも読みやすくなります。

    for (var i in elems) { //何かをする }

たとえば、perl にも同様の概念があります。

my ($var1, $var2);

JavaScript でも同じですが、変数をリストに入れる必要はありません。

于 2013-01-16T08:06:02.167 に答える
1

iステートメントの一部varです..新しい変数を作成するだけです...コードは次と同じです

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