실행 컨텍스트 : 실행할 코드에 제공항 환경 정보들을 모아놓은 객체.
자바스크립트는 어떤 실행 컨텍스트가 활성화 되는 시점에 다음과 같은 일을 한다.
스택(Stack)과 큐(Queue)에 대한 이해가 필요하다.
스택이 바구니라면 큐는 원통.
스택 (LIFO, Last in, first out), 큐 (FIFO, First in, First out)
특정 실행 컨택스트가 생성되는(또는활성화되는) 시점이 콜스택의 맨 위에 쌓이는(노축되는)순간을의미한다.
현재 실행할코드에 해당 실행 컨텍스트가 관여하게 되는 시점을 의미한다고 보면 된다.
var a = 3
이 있다면, var a
를 의미한다.호이스팅 법칙 1 : 식별자 정보를 맨 위로 끌어올린다
//action point 1 : 매개변수 다시 쓰기(JS 엔진은 똑같이 이해한다)
//action point 2 : 결과 예상하기
//action point 3 : hoisting 적용해본 후 결과를 다시 예상해보기
function a () {
var x = 1;
console.log(x);
var x;
console.log(x);
var x = 2;
console.log(x);
}
a(1);
호이스팅 법칙 2 : 함수 선언은 전체를 호이스팅한다.
function a () {
console.log(b);
var b = 'bbb';
console.log(b);
function b() { }
console.log(b);
}
a();
function a () {
var b; // 변수 선언부 호이스팅
function b() { } // 함수 선언은 전체를 호이스팅
console.log(b); //[Function : b]
b = 'bbb'; // 변수의 할당부는 원래 자리에
console.log(b); //'bbb'
console.log(b); //'bbb'
}
a();
function a () {/*...*/} //함수명a가 곧 변수명
a(); // 실행 OK
var b = function () { /* … */}
b(); //실행 OK
var c = function d () {/*...*/}
c(); // 실행 OK
d(); //에러!
outer : 스코프 체인이 가능토록 하는 것( 외부 환경의 참조 정보)
outer는 현재 호출된 하수가 선언될 당시의 LE를 참조(그 당시의 환경 정보를 저장)한다.