2017-01-24 2 views
1

다음은 JavaScript의 신비주의 동작입니다. 사용상의 실수 나 버그가 있습니까?자체 변수의 JavaScript miss context

https://jsfiddle.net/stanislavmachel/f44zbvvr/8/

누군가가 설명 할 수없는 이유를 호출 한 후 자기 변수 미스의 상황 :

function test(){ 

    var self = this; 

    self.func1 = function(){ 
    debugger; // here self == Window 
    } 
    debugger; //here self == test func 
    self.func1(); 
} 

var t = new test(); 

자바 스크립트 코드 난 당신이 스스로 그것을 시도 할 수 JSfiddle를 제공?

+0

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/this – Korgen

답변

2

이것은 버그가 아니며 디버거를 잘못 읽고있는 것입니다.

JS 엔진은 함수가 변수 self을 사용하지 않기 때문에 최적화 측정 값이 doesn't include it in the context object임을 알게됩니다. 디버거에서 볼 수있는 것은 global self입니다.

함수 내에서 self 변수를 사용하는 경우 console.log(self)이면 디버거의 클로저 목록에도 표시됩니다. https://jsfiddle.net/f44zbvvr/9/을 참조하십시오.