2010-12-08 11 views
1

こんにちは動的変数を作成しようとしていますが、変数v0(through〜v5)は定義されていません。javascript - dynamic variables

td.each(function(i){ 
eval('var v' + i + ' = \'' + $(this).html() + '\';'); 
}); 

ご迷惑をおかけして申し訳ございません。

+0

なぜですか?これで実現するのは何ですか? –

答えて

4

これは悪い考えです。

これを行うことができない理由はありますか?

+0

'i'はゼロベースのインデックスになります。' tdHtml'を '[]として宣言することもできます。 'これはまさに配列が意図された使用であるからです。 –

+0

@David Hedlundええ、私はそれがどのように動作し、開始リテラルを変更するのを忘れました。乾杯。 – alex

4

Oh my。

グローバルな「動的変数」を作成する場合は、varを使用しないでください。このコンテキストでは、各関数のローカルな変数が作成されますが、これはまったく役に立たない(そして、ループの外側では未定義になります)。代わりに、次のようにする必要があります。

td.each(function(i){ 
    window['v' + i] = $(this).html(); 
}); 

上記のコードの欠点は、グローバル変数もあまり大きくないことです。一方

、例えば、私はこのようにそれを行うだろう、このvaraibleを使用して、ループ内の多くのコードがあるだろう場合は、(ローカル変数をしたい場合:

td.each(function(i){ 
    var dynVars = {}; 
    dynVars['v' + i] = $(this).html(); 

    alert(dynVars.v4); // use the dynamic variables by saying "dynVars.NAME" 

}); 

あなたは組み合わせることができこれらの2つのソリューションは、変数にアクセスできるようにするスコープにdynvars(var dynVars = {})の宣言を入れておきます。このコールバックにも表示されている限り、すべて正常に動作します。