2013-10-13 5 views
0

다른 몇 가지 예제를 살펴 보았습니다. 그러나이 코드는 제가 수행하려고 시도하는 것에 대해 훨씬 더 복잡하고 내 문제에 어떻게 적용하는지 이해하지 못합니다. 그래서 여기 내 희망 간단한 문제입니다 :자바 스크립트 SetTimeout 변수 액세스

function myObject(){ 
this.aVar = 0; 

var aFunction = function(aParam){ 
    console.log(aParam); 
} 

this.theCallerFunction = function(){ 
    setTimeout(function(){ aFunction(this.aVar)},5000); 
} 

} 

문제는 aFunction의 내부 매개 변수 값이 "신고되지 않은"이라는 것이다, 그리고 0과 나는 이렇게 "선언되지 않은"인쇄하고 있습니다. 누군가 여기서 나에게 무슨 일이 일어나고 있는지에 대한 간단한 해결책과 설명을 줄 수 있습니까?

내가 년 자바 스크립트에서 OO을위한 객체 지향 C# 및 자바를 해왔은 내 머리를하고있다.

답변

3

당신은 몇 가지 선택이있다. 최신 브라우저에서 .bind()을 사용하거나 액세스 할 수있는 변수에 을 넣을 수 있습니다.

function myObject(){ 
    this.aVar = 0; 

    var aFunction = function(aParam){ 
     console.log(aParam); 
    } 

    // save copy of this that can be accessed from callback 
    var self = this; 
    this.theCallerFunction = function(){ 
     setTimeout(function(){ aFunction(self.aVar)},5000); 
    } 
} 
관련 문제