2
for 루프에서 여러 번 콜백을받는 API 함수를 호출합니다. 콜백은 인덱스에 특정한 것을해야한다. willCallBack 함수 (API의 일부 임)를 변경할 수 없으며 전역 변수를 작성하지 않으려합니다.for 루프에서 인스턴스화 된 다중 콜백의 액세스 색인
다음 스 니펫은 문제를 보여줍니다. 첫 번째 for-loop는 첫 번째 시도이지만 모든 콜백에 대해 i == 4를 반환합니다. 두 번째 for-loop 작동 -하지만 추악하고 'hackish'라고 느낀다.
'i'값을 콜백 함수 정의로 가져 오는 더 깨끗한 방법은 무엇입니까?
var result = '', result2 = '';
// doesn't work; i == 4 for all
for(var i=0; i<4; i++) {
willCallBack(function(msg) {
result += msg + i + '\n';
});
}
// works, but kinda ugly
for(var i=0; i<4; i++) {
willCallBack(function(i) {
return function(msg) {
result2 += msg + i + '\n';
};
}(i));
}
// part of API, cant change
function willCallBack(cb) {
window.setTimeout(cb, 500, "can't change me");
}
// show the results
window.setTimeout(function(){
alert(result + '\n\n' + result2)
}, 1000);
글쎄, 못 생겼지 만 내가 상상할 수있는 가장 짧은 해결책은 – DerWaldschrat
아름다움은 보는 사람의 눈에, 추악한 작품은 ... – Ibu