JavaScript에는 상황에 따라 이를 가리키는 자체 메커니즘이 있습니다.
글로벌 범위
console.log(this); //全局变量
전역 범위는 이를 사용하여 브라우저 환경의 창인 전역 변수를 가리킵니다.
참고: ECMAScript5의 엄격 모드에는 전역 변수가 없으며 여기서는 정의되지 않았습니다.
함수 호출
function foo() { console.log(this); } foo(); //全局变量
함수 호출에서도 이는 전역 변수를 가리킵니다.
참고: ECMAScript5의 엄격 모드에는 전역 변수가 없으며 여기서는 정의되지 않았습니다.
객체 메서드 호출
var test = { foo: function () { console.log(this); } } test.foo(); //test对象
객체 메서드 호출에서 이는 호출자를 가리킵니다.
var test = { foo: function () { console.log(this); } } var test2 = test.foo; test2(); //全局变量
그러나 이 함수의 지연 바인딩 기능으로 인해 위의 예에서는 함수를 직접 호출하는 것과 동일한 전역 변수를 가리킵니다.
동일한 코드 세그먼트는 실행 시에만 확인할 수 있다는 점이 매우 중요합니다.
생성자
function Foo() { console.log(this); } new Foo(); //新创建的对象 console.log(foo);
생성자 내부에서 새로 생성된 개체를 가리킵니다.
명시적으로 설정
function foo(a, b) { console.log(this); } var bar = {}; foo.apply(bar, [1, 2]); //bar foo.call(1, 2); //Number对象
Function.prototype의 호출 또는 적용 메소드를 사용하는 경우 함수 내부의 이것이 전달된 첫 번째 매개변수로 설정됩니다.