2011-04-11 4 views
0

나는 다음 JS 코드 조각, 필자의 경우 처음으로 업데이트 된 값을 얻는 효율적인 방법은 무엇입니까?

var myloop=function(element){ 
    ... 
    var myValue; 

    element.onClick(){ 
     //GET the first value of variable "myValue" 
    }; 
}; 
myloop.start(); 

myloop 시작

, myloop 함수의 내용이 serverl 시간지역 변수 myValue 업데이트됩니다 때마다 myloop가되었습니다 실행 실행됩니다있다.

myloop는 함수 내부에서,이 이벤트 핸들러가 myValue 로컬 변수의 값을 갱신 에만 관심이다 이벤트 핸들러element.onClick()있다.

나는 "myValue"핸들러 내부의 첫 번째 업데이트 된 값을 얻을 수있는 가장 효율적인 방법 몇 가지 제안을 부탁드립니다.

내 구현은 indexArraymyloop 외부 함수를 정의하고 처리기, I는 "myValue의 첫번째 업데이트 된 값이 배열에서 첫 번째 요소를 얻을 어레이 내부의 모든 갱신 된 값을 저장하는 것 ". 그러나 이것은 배열의 나머지 업데이트 된 값이 쓸모 없기 때문에 이것이 효율적입니다.

그래서 누구나 처리기 내부에서 myValue의 첫 번째 업데이트 된 값을 얻으려면 다른 제안을 할 수 있습니다.

답변

1

myValuemyLoop의 범위로 정의되며, 요소의 onclick 안에 있으면 복사가 아닌 해당 변수의 메모리 공간을 참조하게됩니다.

따라서 참조를 유지하려면 새 범위를 만들어야합니다. 이 복사본은 복사본을 만들지 않지만이 범위는 새 값으로 업데이트되지 않으므로 이전 버전을 계속 참조하게됩니다. 앤디 - 전자 대답 @ 기반으로

JavaScript for loop index strangeness에 :

var myloop=function(element){ 
    ... 
    var myValue; 

    (function (myValue) { 
     element.onclick = function() { 
      //GET the first value of variable "myValue" 
     } 
    })(myValue); 
} 

이것은은 "올바른"방법은 그것을 해결하기 위해 IMHO. 더 효율적인 방법은 firstValue과 같은 전역 변수를 선언하고 myValue으로 설정하면 (공용 속성을 변경할 경우 설정자를 만들 수 있음) firstValue가 null인지 확인합니다. 이 경우 값을 바꾸면 아무 것도하지 마십시오.

행운을 빈다.

관련 문제