2011-08-26 3 views
2

매개 변수로 콜백 함수가 필요한 비동기 함수를 호출하고 있습니다.Javascript - 콜백 함수에 더 많은 매개 변수 추가

for(i in array) 
{ 
    var item = array[i]; 
    functionToCall(item[i][1], 50, function(a, b) 
    { 
     alert(a + b); 
    }); 
} 

내가 functionToCall 기능을 편집 할 수 없습니다 :

여기에 자바 스크립트 코드입니다. 내가하고 싶은 일은 이와 같은 콜백 함수에서 "item"변수를 사용하는 것입니다.

for(i in array) 
{ 
    var item = array[i]; 
    functionToCall(item[i][1], 50, function(a, b, c) 
    { 
     alert(a + b + c); 
    }, item); 
} 

하지만이 코드는 올바르게 작동하지 않습니다. 필자는 배열의 마지막 항목을 항상 사용하기 때문에 함수 내에서 "item"을 사용할 수 없습니다.

어떻게하면됩니까?

답변

4

함수 내에 item을 사용할 수 있지만 매번 배열의 마지막 요소를 사용하지 않도록 "캡처"해야합니다.

for(var i = 0, l = array.length; i < l; ++i) { // better than for .. in 
    var item = array[i]; 
    (function(item, i){ 
     functionToCall(item[i][1], 50, function(a, b) // do you really re-index item with the same index? 
     { 
      alert(a + b); 
     }); 
    })(item, i); 
} 
+0

이 예상보다 더 나은 작품 덕분에 많이! – Marm

0

for..in을 사용하여 배열을 반복하는 것은 좋지 않은 생각입니다. 대신 .forEach()를 사용하고 많은 문제는 사라 :

array.forEach(function(item) 
{ 
    functionToCall(item[1], 50, function(a, b) 
    { 
     alert(a + b + item[1]); 
    }); 
} 

는 이전 버전의 브라우저에서 see this.forEach()을 사용합니다.

0

나는 이런 식으로 뭔가를 시도 할 것입니다 :

function createExecutionCall(itemIndex, number, item) 
{ 
     return function() { functionToCall(itemIndex, number, function(a, b) 
     { 
      // Example, item should be contained within this closure then 
      alert(a + b + item); 
     }); 
} 

for(i in array) 
{ 
    var item = array[i]; 

    var call = createExecutionCall(item[i][1], 50, item); 
    call(); 
    } 
관련 문제