실행 컨텍스트

<aside> 💡 실행 컨텍스트는 실행할 코드에 제공할 환경 정보들을 모아놓은 객체이다. 이는 자바스크립트의 동적 언어로서의 성격을 가장 잘 파악할 수 있는 개념이다. 실행 컨텍스트가 활성화되는 시점에 다음과 같은 일을 한다.

  1. 선언된 변수를 위로 끌어 올린다 = 호이스팅 (hoisting)
  2. 외부 환경 정보를 구성한다.
  3. this 값을 설정한다.

위와 같은 현상 때문에 다른 언어에서 발견할 수 없는 특이한 현상이 발생한다.

</aside>

0. 콜스택?

1-1 실행 컨텍스트란?

2. VariableEnvironment vs LexicalEnvironment

3. LexicalEnvironment - environmentRecord와 호이스팅

3-1. 호이스팅

3-1-1. 호이스팅의 규칙

중간 정리

<aside> 💡 - 실행 컨텍스트실행할 코드에 제공할 환경 정보들을 모아놓은 객체이다.

</aside>

3-1-2. 함수 선언문과 함수 표현식

4. LexicalEnvironment(2) - 스코프, 스코프 체인, outerEnvironmentReference(=outer)

5. 스코프 체인

  1. outer는 현재 호출된 함수가 선언될 당시 의 LexicalEnvironment를 참조한다.
  2. 예를들어 A함수 내부에 B함수 선언 → B함수 내부에 C함수 선언(Linked List) 한 경우
  3. 결국 타고, 타고 올라가다 보면 전역 컨텍스트의 LexicalEnvironment를 참조하게 된다.
  4. 항상 outer는 오직 자신이 선언된 시점의 LexicalEnvironment를 참조하고 있으므로, 가장 가까운 요소부터 차례로 접근 가능하다.
  5. 결론 : 무조건 스코프 체인 상에서 가장 먼저 발견된 식별자에게만 접근이 가능하다.

뭔소린지 모르겠고 코드를 한번 보자!

var a = 1;
var outer = function() {
	var inner = function() {
		console.log(a); // undefined
		var a = 3;
	};
	inner();
	console.log(a); // 3
};
outer();
console.log(a); // 3