다음과 같은 코드가있는 경우 :범위
var global = this;
function A() {
function B() {
return this;
}
return B();
}
var C = new A();
C === global // true
왜 함수 B의 this
글로벌 공간이 아니라 객체 A의 this
을 참조 않습니다를?
다음과 같은 코드가있는 경우 :범위
var global = this;
function A() {
function B() {
return this;
}
return B();
}
var C = new A();
C === global // true
왜 함수 B의 this
글로벌 공간이 아니라 객체 A의 this
을 참조 않습니다를?
this
의 값은 모든 함수 호출시 결정됩니다. 컨텍스트없이 B
이 호출되기 때문에 값은 전역 개체입니다.
그것은 단순히 복사하여 외부 환경에서 this
을 보존 할 수있다 : 당신은 당신이 기능을 원하는대로 할 수 있기 때문에
이에 대한 추론은 다음과 같습니다
function A() {
var x = this;
function B() {
return x;
}
return B();
}
것은 뾰족한의 정답을 동반. 함수 A에서 함수 B를 반환하고 전역 변수로 저장할 수 있습니다.
또는 함수 B를 메서드로 Object 나 12 개의 객체에 추가 할 수 있습니다. 또는 AJAX 콜백에서 사용할 수도 있고 타이머에서 콜백으로 사용할 수도 있습니다.
엔진은 함수 B에서 일어날 일을 모르기 때문에 this
은 호출 될 때 함수가 호출되는 모든 것을 참조합니다.
이것은 언어에 많은 역 동성을 추가하지만 주어진 시간에 "this"가 무엇을 가리키고 있는지 잘 모르겠다면 많은 두통이 추가됩니다. 엄지
규칙 : 함수는 객체의 메소드로서 부착 직접 이거나 함수가 .call
또는 .apply
와 호출되는 다음, myFunc.call(myObj)
같은 this
를 컨텍스트 공급되는
하면 window
을 참조하십시오.
답장을 보내 주셔서 감사합니다. 정말 고마워요. 지금은 이해. –
this
은 범위와 아무 관련이 없습니다. 변수가 아닙니다. 현재 실행중인 함수의 객체 컨텍스트로 평가되는 키워드입니다. 함수의 객체 컨텍스트는 호출 방법에 따라 결정됩니다. 함수가 어디에 또는 어떻게 정의되는지는 중요하지 않습니다.
fn()
과 같은 함수를 호출하면 객체 컨텍스트에 있지 않고 단지 this
의 단순한 위치에서 오류가 발생하면 언어가 잘못 처리하려고 시도합니다. 이것은 엄격한 모드에서 다소 고정되어 있습니다 (undefined
).
어떤 개체 I.E.의 속성으로 함수를 호출 할 때. obj.fn()
이면 obj
은 해당 호출에 대해 this
에 바인딩됩니다.
return B.call(this);
:
그냥 전화에 적합한 개체 컨텍스트를 얻기 위해 어떤 객체에 함수를 연결하는 데 거추장스러운 것 때문에
모든 기능을 명시 적으로 개체 컨텍스트를 지정할 수있는.call
방법을 상속 @ Pointy의 대답 외에도,이 [실제 기술은 여기에서] 볼 수 있습니다 (http://stackoverflow.com/questions/11814953/what-is-the-difference-in-the-invocation-of-this-in- 이 예제들). (두 번째 코드 스 니펫) – phant0m