자바스크립트 작동 방법
Execution Contexts and Execution Stack
자바스크립트 엔진이 코드를 실행할 때 일어나는 일
1. parser에 의해 코드가 parse 됨.
문법 체크, 코드가 유효한지 검사
맞으면 신택스 트리 만듦
2. 머신 코드로 변환
3. 코드가 실행됨
글로벌 실행 문맥은 어떤 함수 안에도 있지 않는 것
기본적으로 window object이므로
window.name이나 name 이나 전역 변수면 똑같은 거다
함수는
global execution context
-> first()
-> second() (first 안에서 실행되는 함수)
-> third() (second 안에서 실행되는 함수)
순으로 쌓이며 실행되는 순서는 스택과 같다(pop)
즉 third, second, first 순으로 실행됨
Creation and Execution Phases and Hoisting
실행 문맥 오브젝트
Variable Object: 함수 인자를 포함
Scope chain
"This" variable
1. 생성 단계
변수 오브젝트 생성
스코프 체인 생성
this 변수의 값 결정
2. 실행 단계
줄 단위로 코드 실행
모든 함수는 변수 오브젝트한테 저장된다
이것들이 실행 단계가 시작되기 전에 이미 사용가능한 것을 hoisted라고 함
: 변수 선언X 함수 선언에서만 작동함
var val = function() {}... X
function func() {}...O
실행 문맥은 코드가 실행되기도 전에 중요한 데이터들을 다 담고 있다
var age = 23
function foo() {
var age = 65
console.log(age)
}
foo() // 65 >> foo funciton의 excution context object!!
console.log(age) // 23 >> global execution context object
Scoping in javascript
Lexical scoping: 부모 함수에도 접근
Global scope
first() scope: local scope
second() scope
second->first->global을 scope chain이라 부른다
거꾸로 접근하는 것은 불가능(예: global이 second로)
실행 스택과 스코프 체인은 다르다