2011-06-11 1 views
1

가 나는 z는 내 인라인 함수와 동일한 범위에 생각하지 않습니다 그러나이인라인 자바 스크립트 콜백 함수의 상위 범위를 어떻게 얻을 수 있습니까?

function testfunction(runthis) 
{ 
    runthis(); 
} 

function main() 
{ 
    var z = 15; 
    testfunction(function(){ alert(z); }); 
} 

비슷한 있습니다. testfunction 또는 인라인 함수에 추가 매개 변수를 추가하지 않으면 인라인 함수가 main과 동일한 범위에 속할 수있는 방법이 있습니까? 나는 콜백 함수가 작동하도록 노력하고있어.

편집 : 위의 내용은 작동하지 않는 것 같은 위증 한 예라고 생각합니다. 그러나 여기에 http://pastebin.com/A1pq8dJR 인스턴스는 .call (this, parameters)을 추가하고 범위를 수동으로 설정하지 않으면 작동하지 않습니다 (정확히 어떤 일을하는지 확신 할 수는 없지만). 나는 이것이 imageLoaded 범위를 참조 할 것이라고 생각했을 것입니다 만, imageBoxCreate의 범위를 참조하고 있습니까? 아무도 왜 그걸로 일을 못해, 왜이 일을 고정 설명 할 수 있을까?

+1

귀하의 의도를 더 잘 설명해 주시겠습니까? 위의 작업과 폐쇄 '덕분에'15 '경고. 나는 당신이 "같은 범위에 속함"이란 뜻을 이해하지 못합니다. – deceze

+0

당신은 무엇을하려고합니까? 게시 된 코드로 '15'에 대한 경고 메시지가 나타납니다. –

+0

함수 호출 후에 .call (this, parameters)을 입력하지 않으면 작동하지 않습니다. http://pastebin.com/A1pq8dJR 코드에 대한 링크입니다. – Macmee

답변

3

자바 스크립트에서 전역 함수를 호출하는 경우 this 개체는 최상위 수준 window 전역 개체가됩니다. 객체에서 도트 연산자를 사용하여 함수를 호출하면 함수가 실행될 때 this이 해당 객체가됩니다. function.call을 사용할 경우 명시 적으로 어떤 개체가 this이어야하는지 지정하고 있습니다. 나는 당신이 thisvar을 어떻게 사용하는지에 대한 범위 오류를 범하기 쉽다고 생각하지만, 코드가 충분히 길어서 디버깅에 시간을 할애하지 않을 정도로 충분히 복잡하다. 작은 코드 샘플로 문제를 분리 할 수 ​​있다면 사람들은보다 쉽게 ​​도움을받을 수 있습니다.