2012-07-06 1 views
0

JSHint는 루프 내에서 함수를 작성하지 말아야한다고 알려줍니다. 그런 다음 일반적으로 루프 외부에서 함수를 만듭니다.Javascript : 루프 외부의 리팩토링 함수

하지만 지금은 가지고이 더 어려운 부분 :

for (r=0;r<x;r++) { 
    for (c=0;c<y;c++) { 
     var arr = [c,r]; 
     setTimeout((function(arr) { return function() { doSomething(arr); };})(arr), 50+c*550 + r*230); 
    } 
} 

어떻게 내가 JSHint 경고를 얻을이 부분을 리팩토링 수 있을까?

+0

내가 대답을 생각하지 않는다 더 컨텍스트를 제공하지 않고 부여 할 수 있습니다. y는 어디에 정의되어 있습니까? 왜 이런 일을 저지르고, settimout을 루프 (코드 냄새처럼 보입니다)에서 실행하고 있습니까? – helpermethod

+0

x와 y는 정수 변수입니다. 루프에서 setTimeouts에 대한 나쁜 점은 무엇입니까? – clamp

답변

5

그것은 간단하다 :

for (r=0;r<x;r++) { 
    for (c=0;c<y;c++) { 
     var arr = [c,r]; 
     setTimeout(proxy(arr), 50+c*550 + r*230); 
    } 
} 

function proxy(arr){ 
    return function(){ 
     doSomething(arr); 
    }; 
}