[javascript] getter에서 반환 된 함수의`this` 키워드 값

다음 예 에서이 키워드 의 예상치 못한 값을 찾았습니다 .

let x = {
    z : 10 ,
    get func1() {
        return function(v) {
            console.log(this === v);
        }
    }
}


x.func1(x)

의 값 키워드는 객체입니다 X 가 그 객체에서 실행되는 것처럼 내가에만 기대 get 함수 키워드는 호출 객체에 동일 X

이 예는 우리에게 차이점을 보여줍니다

let x = {
    func2() {
        return function(v) {
            console.log(this === v);
        }
    }
}

x.func2()(x);

두 예제 에서 getter 함수 인 func1 과 객체의 메소드 인 func2 가 객체 x 에서 실행 된 다음 반환 된 함수가 실행됩니다. 왜 첫 번째 예에서 값이 아닌 전역 객체가 아닌 객체에 동일 X .



답변

즉 A의 매우 흥미로운 질문입니다.

속성 액세스 결과 즉시 함수가 호출되기 때문입니다. 따라서 이들은 기본적으로 동일합니다.

let x = {
    get func1() {
        return function(v) {
            console.log(this === v);
        };
    },
    func2(v) {
        console.log(this === v);
    }
};

x.func1(x);
x.func2(x);

두 경우 모두 :

  1. 특성 값을 읽고 함수 참조를 생성합니다.
  2. 이 함수는 동일한 속성 액세스 식의 일부로 실행됩니다.

func1접근 자 속성이고 func2데이터 속성 이라는 사실 은 중요하지 않습니다. 속성을 읽은 결과 값이 어떻게 사용되는지가 중요합니다.


답변