2012-04-04 7 views
1

for ... in 루프를 사용할 때마다 루프의 인덱스 변수가 항상 변수 범위에있는 것으로 보입니다.어떻게 지역 변수에 ... for 루프에서 인덱스 변수를 넣을까요?

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

변수 '키'변수 범위에 위치한다 : 예를 들어
I는이 루프를 사용하는 방법으로 구성 요소가있는 경우. 구성 요소의 아무 곳이나 variables.key를 이미 선언했다면이 for ... in 루프를 사용하면이 값을 덮어 씁니다.

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

이 그러나 구문 분석 오류가 발생합니다 : 내가 실제로 필요한 것은이 같은 것입니다.

for ... 인덱스를 다른 범위에 넣고 변수 범위를 지정하는 방법이 있습니까?

+0

어떻게 간단한 for 루프를 작성하는 방법에 대한? – Vikas

+0

'에 대한 (VAR I = 1; 나는 <= arrayLen (값); 내가 ++) { \t \t \t \t \t // 코드 \t \t \t \t}' – Vikas

+0

@Vikas 때문에 함께 ... 당신이 돌이 할 수있는 구조. 내 예제에서는 'params'구조체입니다. 나는 여전히 for 루프를 사용하여 structKeyArray (params) 배열을 루핑 할 수 있었지만, 간단하게 할 수 있는지 궁금해했다. – jan

답변

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

+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.1을 달리고있다 (모두가 그렇듯이 : D) –