실행 컨텍스트란 + this 바인딩
코드를 실행하는 데에 필요한 배경이되는 조건/환경
- 동일한 조건/환경을 지니는 코드뭉치
- 전역공간 (거대한 함수 공간)
- 함수
eval
- module
context? 코드의 배경이 되는 조건, 환경
LexicalEnvironment
- environmentRecord
- 현재 문맥의 실별자 정보 수집 (호이스팅)
- 현재 컨텍스트에서 선언되어 있는 식별자들이 무엇이 있느냐라는 정보를 코드 순서대로 수집하는 일
호이스팅? - 실행 컨텍스트가 생성되자마자 하는 일!
실별자의 정보를 위로 끌어 올리는 현상
- outerEnvironmentReference
- 외부 환경에 대한 참조
- 현재 문맥에 관련 있는 외부 식별자 정보 ( scope chain = 변수의 유효 범위)
call stack
현재 어떤 함수가 동작중 인지, 다음에 어떤 함수가 호출될 예정인지등을 제어하는 자료구조
this 바인딩
실행컨텍스트가 생길때 this바인딩 한다.
this? 함수를 실행한 주체
- 함수가 호출될 때! 호출하는 방식에 따라 다르다!
- 전역공간에서: window / global
- 함수 호출시: window / global
- 메서드 호출시 메서드 호출의 주체 "." 앞
- 원래는 함수인데 어떤 객체와 '관련된'동작을 하게 되면
- callback 호출시: 기본적으로는 함수내부에서와 동일
- 생성자함수 호출시:인스턱스
callback function
제어권 위임
- 제어권을 넘겨받은 대상이 처리하게 된다.
클로저
[1] 내부함수와 LexicalEnvironment의 조합
- A의 lexical envrionment와 내부함수 B의 조합에 의해서 나타는 특별한 현상
[2] 컨택스트 A에서 선언한 변수를 내부함수 B에서 참조할 경우에 발생하는 특별한 현상
[3] 내부함수의 outerEnvironmentReference 외후 함수의 environmentRecord를 참조할때 생기는 현상
function outer(){
let a = 1;
function inner(){
a++
}
return inner
}
outer();
컨켁스트 A에서 선언한 변수 a를 참조하는 내부함수 B를 A의 외부로 전달할 경우, A가 종료된 이유에도 a가 사라지지 않는 현상