2012-04-04 80 views
1

每當我使用for ... in循環時,循環的索引變量總是看起來在變量範圍內。
例如,如果我有與使用該環路的方法的部件:如何把索引變量放在for循環中的局部範圍內?

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

變量「鍵」將被放置在變量範圍。如果我已經在組件中的任何位置聲明瞭一個variables.key,那麼當我將此用於... in循環時,該值將被覆蓋。我真正需要的是這樣的:

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

然而這會引發解析錯誤。

有沒有什麼辦法可以將for ... in index放在不同範圍,然後是變量範圍?

+0

如何寫一個簡單的for循環? – Vikas 2012-04-04 07:27:45

+0

'爲(VAR I = 1;我<= arrayLen(值);我++){ \t \t \t \t \t //代碼 \t \t \t \t}' – Vikas 2012-04-04 07:30:59

+0

@Vikas因爲與...在你可以遍歷結構。在我的例子中,'params'是一個結構體。我仍然可以通過循環structKeyArray(params)數組來使用for循環,但是我想知道是否可以使用簡單的for ...在 – jan 2012-04-04 07:55:57

回答

10

如果您事先沒有var,則CFC內部的默認範圍是變量。

你必須VAR外循環的指數,像這樣: -

var key = ""; 

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

的另一種方法,以避免你的函數內varring的一切,是一個「本地」結構中聲明變量。在CF9局部範圍內建但CF8或下方做這樣的事情: -

var local = structNew(); 

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

謝謝。我會選擇你的第一個選擇。看起來更優雅,然後第二個。 – jan 2012-04-04 07:58:07

+1

var local = structNew()(或簡寫{} CF8 +)很好,如果函數中有很多變量的話。保存你不得不記住的一切和東西可能「泄漏」出來。對於上面的例子你是對的,這是過度的。 – 2012-04-04 08:25:09

2

這句法將ColdFusion的9個工作及更高版本:

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

我在9.0.0中試過這個語法,並且出現語法錯誤。你用什麼版本?也許9.0.1? – jan 2012-04-11 14:17:25

+1

我不能肯定地說,這將在9.0.0中起作用。我正在運行9.0.1(每個人都應該:D) – 2012-04-11 14:21:06