2012-04-04 19 views
1

for ... inループを使用するたびに、ループのインデックス変数は常に変数スコープ内にあるようです。私はこのループを用いる方法と構成要素がある場合
例えば:どのようにインデックス変数をfor ... forループ内のループに配置するか?

for(key in params){ 
    writeOutput(key); 
} 

を変数「キー」は、変数のスコープに配置されます。コンポーネントのどこにでもvariables.keyがすでに宣言されている場合、for ... inループを使用すると、この値は上書きされます。実際に必要なのは次のようなものです。

for(var key in params){ 
    writeOutput(key); 
} 

これは解析エラーです。

for ...インデックスを別のスコープに入れて変数スコープに入れる方法はありますか?

+0

どのように? – Vikas

+0

'のための(VAR I = 1; I <= ARRAYLEN(値); iは++){ \t \t \t \t \t //コード \t \t \t \t}' – Vikas

+0

@Vikasため持つため...あなたがオーバーループ缶に構造。私の例では、 'params'は構造体です。私はまだforループをstructKeyArray(params)配列をループすることで使用することができましたが、それが単純なものかどうかはわかりませんでした。 – jan

答えて

10

事前にvarを設定していない場合、CFC内のデフォルトスコープは変数です。

あなたがそうのようなループの外のインデックスをVARする必要があります - あなたの関数内のすべてをvarring避けるために、

var key = ""; 

for(key in params){ 
    writeOutput(key); 
} 

別のアプローチを、「ローカル」構造内にあなたの変数を宣言することです。 CF9ではローカルスコープが組み込まれていますが、以下のCF8またはのために、このような何か: -

var local = structNew(); 

for(local.key in params){ 
    writeOutput(local.key); 
} 
+0

ありがとう。私はあなたの最初のオプションと一緒に行きます。 2番目の方がよりエレガントに見えます。 – jan

+1

関数内にたくさんの変数がある場合、var local = structNew()(または略語{} CF8 +)は良いです。 varを覚えておかなくても、潜在的に「漏出」する可能性があります。上記の例が正しい場合、それは過剰です。 –

2

この構文は、ColdFusion 9以降で動作します:ループのための簡単な記述に関する

for (var key in params){ 
    writeOutput(key); 
} 
+0

私はこの構文を9.0.0で試してみましたが、構文エラーがありました。あなたはこれをどのバージョンで使用しましたか?おそらく9.0.1? – jan

+1

私はこれが9.0.0でうまくいくとは確信できません。私は9.0.1を実行しています(誰もが:D) –

関連する問題