2013-11-19 6 views
0

이 질문은 전에 질문했지만 생각을 찾을 수 없었습니다. 내 문제를 설명하기에 좋은 단어가 부족한 것 같습니다.자바 스크립트에서 이벤트 함수의 전역 변수 업데이트

나는 각 반복마다 객체를 만들고, 콜백 함수가 생성 된 객체를 사용하는 이벤트 리스너를 추가하는 루프를 가지고있다.

for(var i in items) 
{ 
    x = new SomeClass(i) 

    someAPI.event.addListener(i, 'click', function(ev){ 
     x.someMethod() 
    }); 
} 

무슨 일이, 내가, 이벤트 함수 정의에서 변수 x 이벤트가 트리거되는 경우에만 평가되는 이유를 이해하고, x이며이 이름에 영향을받은 마지막 값으로 같아지는 마지막 반복에서 주어진 값입니다.

이벤트 기능 정의 내에서 루프에 현재 값 x을 가져 오는 원하는 동작을 얻는 것이 가능한지 알고 싶습니다. 감사합니다. .

답변

2
for(var i in items) { 
    (function(j) { 
     var x = new SomeClass(j); 

     someAPI.event.addListener(j, 'click', function(ev){ 
      x.someMethod() 
     }); 
    })(i); 
} 

키는 각 반복마다 클래스의 새 인스턴스를 만드는 var 키워드입니다.
i의 값을 일정하게 유지하고 각 반복마다 새 범위를 만들도록 IIFE를 추가했습니다.

+0

고맙습니다. 완벽하게 작동합니다. 사실, 내 코드에서'var' 키워드를 사용했는데 (내 코드 예제에서는 빠졌었지만), 내 코드에서 누락 된 것은 IIFE였다. – ibi0tux

+0

@ ibi0tux - 문제 없습니다! – adeneo

관련 문제