🍑 Execution context(EC)
- JS 엔진은 코드가 없어도 실행 환경(execution context)을 초기화한다.
- scope는 코드가 현재 실행되는 환경, 맥락(context)을 의미한다.
- this 포인터(글로벌 스코프에서 window를 가리킴), 변수들, 스코프 체인 등이 환경에 포함된다.
- function Execution context가 만들어지면 전에 실행되던 context는 scope chain에 들어간다.
🍑 This가 가리키는 것
🍉 dynamic binding
- 함수 호출: 함수를 직접 호출한다.
- 메서드 호출: 객체의 method를 호출한다.
- 생성자 호출: 생성자 함수를 호출한다.
- 간접 호출: call, apply 등으로 함수를 간접 호출한다.
- 이러한 호출의 여러 경우에서 this가 환경에 따라 바뀌는 것을 동적 바인딩(dynamic binding)이라한다.
- bind, apply, call 등으로 this가 가리키는 것을 조작할 수 있다.
const o = {
name: 'park',
printName: function() {
console.log("My name is ", this.name);
}
}
o.printName();
setTimeout(o.printName(), 10);
setTimeout(o.printName.bind(o), 20);
- bind()를 통해 this를 객체 o로 설정한 것이다.
- 화살표 함수의 this는 호출된 함수를 둘러싼 execution context를 가리킴(this 조작 불가능)
일반 함수의 this는 새롭게 생성된 execution context를 가리킴(bind, call등으로 조작 가능)
🍉 Javascript Closure
-
일급 객체: 다른 변수처럼 대상을 다룰 수 있는 것
JS에서 함수는 일급 객체에 속한다.
const func = () {return 1;}
console.log(func);
-
함수가 생성될 때, 함수 내부에서 사용되는 변수들이 외부에 존재하는 경우 그 변수들은 함수의 스코프에 저장된다.
함수와 함수가 사용하는 변수들을 저장한 공간을 클로저(closure)라 한다.