2012-01-28 2 views
0

w.r.t a div라고하는 this 포인터의 범위 또는 가시성은 NESTED 기능이 아닌 의도 된 기능으로 제한됩니다.왜 javascript의 "this"포인터 범위가 제한되어 있습니까?

는하지만, 그 함수의 모든 지역 변수가 중첩 된 기능에 볼 수 있습니다 - 왜이 사업부에 <function name>(this)와 함수를 호출을 통해 this 포인터를 받고 .. ?? 일어나지 않는 - 심지어 this 뜻이 나던 또한 짧은에서 <function name>

에서 지역 변수는 지적, 여기에 tst1 functionthis 변수에 저를 혼동 코드 ..

<html> 
<script type="text/javascript" > 
    function tst1(){ 
    setTimeout(
    function(){ 
    alert(this.id) 
    }, 2000) 
    } 
    function tst2(){ 
    var elem = this 
    setTimeout(
    function(){ 
    alert(elem.id) 
    }, 2000) 
    } 
</script> 
<style type="text/css"> 
    .test{ 
    margin: 40px 100px; 
    background-color: green; 
    width: 200px; 
    line-height: 40px; 
    text-align: center; 
    height: 40px; 
    } 
</style> 
<div id="fooBar" class="test" onclick="tst1.call(this)"> Emily Rossum</div> 
<div id="chickenRun" class="test" onclick="tst2.call(this)"> Emily Rossum</div> 
</html> 

null하지만 로컬 var에가요 이 함수의 iable은 tst2과 같이 중첩 된 함수에서 볼 수 있어야합니다.

tst1tst2이 반환 된 후에도 함수가 나중에 호출되기 때문에 닫힌 상태에서 읽었습니다. 두 함수가 모두 닫히지는 않았습니까? 그렇다면 부모 함수의 변수가 중첩 된 함수에서 볼 수 있어야합니다.)

답변

2

this 자바 스크립트의 변수는 특정 함수 호출에 항상 고유하다는 점에서 . 기본적으로 모든 함수 호출에 대해 하나의 this이 있지만 외부 함수에 익숙했던 경우와 같을 필요는 없습니다 (this).

바깥 쪽 this을 내부 함수 내에서 사용하려면 로컬에 저장하십시오. 나의 점은 중첩 된 함수에서`부모로부터 this`에 액세스 할 수없는 이유는 무엇 tst2``에서 뭘하는지의

var outer = function() { 
    var self = this; // Save current 'this' in a local 
    var inner = function() { 
    self.name; // refers to the original outer 'this.name' 
    ... 
    }; 
    ... 
}; 
+0

... 난 당신이 그것을 복사 할 때 유 액세스 할 수 있습니다 알고 있었다 때 상태 부모 함수의 반환 된 후에도 액세스 할 중첩 된 저장되어 있어야합니다 .. 부모 함수에서 __references__ (나는 'this' 포함하여 같음) 중첩 된 액세스 할 수 있어야합니다. –

+1

@VivekChandra It 's 왜냐하면 모든 함수는'this'를 가지고 있기 때문에 항상 저장된 함수가 아니라 현재 함수의'this'를 요청할 것입니다. 어떤 지역에서도 마찬가지입니다. outer와 inner 함수가 동일한 이름의 locals를 가지면 당신은 바깥쪽에 접근 할 수 없다. – JaredPar

+0

ur 이전 코멘트의 후반 부분은 나의 의심을 맑게했다. .. 고마워 .. –

관련 문제