this란
- this는 자신이 속한 객체 또는 자신이 생성할 인스턴스를 가리키는 자기참조변수이다.
- this를 통해 자신이 속한 객체 또는 자신이 생성할 인스턴스의 프로퍼티나 메서드를 참조할 수 있다.
- this는 자바스크립트 엔진에 의해 암묵적으로 생성되며, 코드 어디서든 참조할 수 있다.
- 단 this가 가리키는 값인 this 바인딩은 함수 호출 방식에 의해 동적으로 결정된다.
this 바인딩
- 바인딩: 식별자(변수)와 값(원시 값 또는 객체)를 연결하는 과정이다.
- 변수 선언은 식별자인 변수명과 확보된 메모리 공간의 주소를 바인딩하는 것이다.
- this는 키워드로 분류되지만 식별자 역할을 한다.
- this 바인딩은 this와 this가 가리킬 객체를 (연결)하는 것이다.
함수 호출 방식에 따른 this가 가리키는 객체
- 일반 함수 호출: 전역객체
window/global
- 메서드 호출: 메서드를 호출한 객체
- 생성자 함수 호출: 생성자 함수가 (미래에) 생성할 인스턴스
- Function.prototype.apply/call/bind 메서드에 의한 간접호출: Function.prototype.apply/call/bind 메서드에 첫 번째 인수로 전달할 객체
실행 컨텍스트
실행 컨텍스트란,
- 실행 컨텍스트는 소스코드를 실행하는 데 필요한 환경을 제공하고 코드의 실행 결과를 실제로 관리하는 영역이다.
- 식별자(변수, 함수, 클래스 등의 이름)를 등록하고 관리하는 스코프 및, 코드 실행 순서 관리를 구현한 내부 메커니즘이다.
- 모든 코드는 실행 컨텍스트를 통해 실행되고 관리된다.
실행 컨텍스트의 구성
1. 실행 컨텍스트
- 코드의 실행 순서를 관리하는 자료구조이다.
- LIFO (Last In First Out) 구조로 들어오는 코드를 관리한다.
2. 렉시컬 환경
- 모든 실별자와 바인딩된 값, 스코프를 기록 및 관리하는 자료구조이다.
- 키와 값을 갖는 객체 형태의 스코프(전역, 함수, 블록 스코프)를 생성하여 식별자를 키로 등록하고 식별자에 바인딩된 값을 관리한다.
즉, 스코프를 구분하여 식별자를 등록하고 관리하는 저장소 역할을 하는 렉시컬 스코프의 실체이다.
이러한 렉시컬 환경에는 두가지 요소로 구성된다.
- 환경레코드: 스코프에 포함된 식별자를 등록하고, 등록된 식별자에 바인딩된 값을 관리하는 저장소이다.
- 외부 렉시컬 환경에 대한 참조: 해당 실행 컨텍스트를 생성한 소스코드를 포함하는 상위코드(스코프)의 렉시컬 환경이다.
참조
실행 컨텍스트 구조
전역 실행 컨텍스트에 바인딩된 전역 렉시컬 환경
함수 실행 컨텍스트에 바인딩된 함수 렉시컬 환경
그림으로 그려주셔서 이해가 되네요 ! 참고하겠습니닷