2011-04-09 10 views
15

jQuery가 아닌 Javascript로 생각하고 있으므로이 작업을 제대로 수행하고 있는지 궁금합니다.Javascript For 루프 콜백?

루프가 끝나면 콜백하고 싶습니다. 이것은 적절한 방법입니까?

for(var i = 0; i < divs.length; i++) { 

    /* do some stuff */ 

    if (i === (divs.length - 1)) { /* call back */ } 

} 

루프가 완료되었을 때 JSON 요청 콜백과 같은 의미는 아닙니다.

+5

실례지만 내 이해는 모르겠다. 루프가 끝났을 때 호출하고 싶다면, ** 루프 대신 ** 루프를 호출하는 것이 어떻습니까? – Aleadam

+0

JavaScript로 생각한다면, 해보십시오. 루프를 수행 한 다음 함수를 호출하십시오. – JAAulde

답변

18

루프 이후에 실제로 무엇을 말하고 콜백을 호출 하시겠습니까? ?

function thing_with_callback(divs, callback) { 
    for(var i = 0; i < divs.length; i++) { 
     /* do some stuff */ 
    } 
    callback(); 
} 
+1

그것은 단지 우스꽝 스럽기 때문입니다. 그리고 디버거에서 대화식으로 편집하고 싶다면 어떻게해야합니까? –

+0

기술적으로 배열이 여전히 실행되기 때문에 비어있는 경우에는 해당되지 않습니다. if 문을 추가하면 쉽게 해결할 수 있습니다. –

+0

@Matthew : "루프가 끝나면 콜백을 원합니다." 루프 밖에서'callback(); '을 넣는 것이 유일한 방법이며'divs.length'에 조건을 쓸 필요가 없습니다. –

20

명확하게하기 위해, 당신은 @ 뮤의 대답에 가야하지만, 당신이 정말로 해야for 구조 내에서 콜백을 포함하는 경우, 당신은 쉼표 연산자 * 사용할 수 있습니다

for(var i = 0; 
    i < divs.length || function(){ /* call back */ }(), false; 
    i++) { 

/* do some stuff */ 

} 

*로를 this fascinating article에 설명되어 있습니다.

+0

+1! – Will

8

코드 라마 마의 대답을 단순하게 만들기 위해 콜백 함수에서 false를 직접 반환 할 수 있습니다. (루프 코드를 다시 한 번 재발하는 것을 피하기 위해)

for(var i = 0;i < divs.length || function(){ /* callback */ return false;}();i++){ 
/* loop code */ 
} 
+0

예제에서는 추가 루프 평가를 수행하지 않습니다. ','연산자는 두 피연산자를 모두 평가하고 오른쪽에있는 피연산자의 결과를 반환합니다. 이제는 항상 거짓 인 표현을 반영하도록 RHS에서 표현식을 사용하고 있음을 알았습니까? – codelahoma

+0

추가 할 경우 새 응답 대신 편집을 사용하십시오. – haykam

5

자바 스크립트 코드의 실행 순서에 대한 질문입니다. 그리고 답변입니다 : 자바 스크립트 코드 라인에 의해 실행 라인이기 때문에

예는 외부 콜백을 넣을 수 있습니다. 비동기 아약스 호출의 경우 고려해야 할 다른 사항이있을 수 있습니다.