this : 자신이 속한 객체 또는 자신이 생성할 인스턴ㄴ스를 가리키는 자기 참조 변수.
-> 자신이 속한 객체 또는 자신이 생성할 인스턴스의 프로퍼티나 메서드를 참조할 수 있다.
this가 가리키는 값(바인딩) : 함수 호출 방식에 의해 동적
으로 결정
-> 상황에 따라 가리키는 대상이 다르다.
바인딩이란? 식별자와 값을 연결하는 과정
+) 자바나 C++ 같은 클래스 기반 언어에서는 this는 언제나 클래스가 생성하는 인스턴스를 가르킨다.
this 바인딩(this에 바인딩될 값)은 함수 호출 방식, 즉 함수가 어떻게 호출되었는지에 따라 동적으로 결정된다.
렉시컬 스코프 : 함수 객체가
생성
되는 시점에 결정
this 바인딩 : 함수호출
시점에 결정
문제점 : 외부 함수인 메서드와 중첩 함수 또는 콜백 함수의 this가 일치하지 않기 때문에 헬퍼 함수로 동작하기 어렵게 만든다.
생성자 함수 : 객체(인스턴스)를 생성하는 함수
new 연산자와 함께 호출 > 생성자 함수
new 연산자가 없다면 > 일반 함수
applay, call, bind 메서드는 Function.prototype의 메서드이다. > 모든 함수가 상속 받아 사용할 수 있다.
applay, call : 함수를 호출
첫 번째 인수로 전달한 특정 객체를 호출한 함수의 this에 바인딩한다.
bind : 함수를 호출하지 않음
첫 번째 인수로 전달한 값으로 this 바인딩이 교체된 함수를 새롭게 생성해 반환한다.
함수 호출 방식 | this 바인딩 |
---|---|
일반 함수 호출 | 전역 객체 |
메서드 호출 | 메서드를 호출한 객체 |
생성자 함수 호출 | 생성자 함수가 (미래에) 생성할 인스턴스 |
(apply, call, bind) 간접 호출 | 메서드에 첫번째 인수로 전달한 객체 |