2012-04-04 1 views
1

Immer wenn ich eine for ... in-Schleife verwende, scheint die Indexvariable der Schleife immer im Variablenbereich zu liegen.
Zum Beispiel, wenn ich eine Komponente mit einem Verfahren, das diese Schleife verwendet:Wie wird die Indexvariable für ... in Schleife im lokalen Bereich eingefügt?

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

Die Variable ‚Schlüssel‘ wird in dem Variablen Rahmen platziert werden. Wenn ich an einer beliebigen Stelle in der Komponente einen Variablenschlüssel deklariert habe, wird dieser Wert überschrieben, wenn ich diesen für ... in Schleife verwende. Was ich brauche, ist etwas in der Art:

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

Dies löst jedoch einen Parsing-Fehler aus.

Gibt es eine Möglichkeit, die für ... in Index in einem anderen Bereich als die Variablen Bereich?

+0

Wie wäre es eine einfache for-Schleife zu schreiben? – Vikas

+0

'for (var i = 1; i <= ArrayLen (Werte); i ++) { \t \t \t \t \t // Code \t \t \t \t}' – Vikas

+0

@Vikas weil mit für ... in können Sie eine Schleife über Strukturen. In meinem Beispiel ist 'params' eine Struktur. Ich könnte immer noch eine for-Schleife verwenden, indem ich das structKeyArray (params) -Array überschlinge, aber ich frage mich, ob es mit einem einfachen für ... in – jan

Antwort

10

Der Standardbereich in CFCs ist Variablen, wenn Sie nicht zuvor var.

Sie haben den Index außerhalb der Schleife var wie folgt: -

var key = ""; 

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

Ein alternativer Ansatz, varring alles innerhalb Ihrer Funktionen zu vermeiden, ist Ihre Variablen innerhalb einer „lokalen“ Struktur zu erklären. In CF9 ist ein lokaler Umfang in aber für CF8 gebaut oder unten etwas tun, wie folgt aus: -

var local = structNew(); 

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

Danke getan werden könnte. Ich werde mit deiner ersten Option gehen. Scheint eleganter als der zweite. – jan

+1

var local = structNew() (oder shorthand {} CF8 +) ist gut, wenn Sie viele Variablen innerhalb einer Funktion haben. Erspart Ihnen, sich daran zu erinnern, alles und potentiell "leaking" out zu lassen. Für das obige Beispiel hast du Recht, es ist Overkill. –

2

Diese Syntax wird in Coldfusion arbeiten 9 und höher:

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

Ich habe diese Syntax in 9.0.0 versucht und einen Syntaxfehler bekommen. In welcher Version hast du das benutzt? 9.0.1 vielleicht? – jan

+1

Ich kann nicht mit Sicherheit sagen, dass dies in 9.0.0 funktioniert. Ich laufe 9.0.1 (wie jeder sollte: D) –

Verwandte Themen