자바스크립트의 동작원리 개념
ECMAScript 사양은 소스코드를 4가지 타입으로 분류한다.
1. 전역 코드
전역 변수를 관리, 최상위 스코프인 전역 스코프 생성
2. 함수 코드
지역 스코프 생성, 지역 변수, 매개변수 ,arguments 객체 관리
전역 스코프에서 시작하는 스코프 체인의 일원으로 연결
함수 실행 컨텍스트 생성
3. eval 코드
strict mode에서 자신만의 독자적 스코프 생성
eval 실행 컨텍스트 생성
4. 모듈 코드
모듈별로 독립적인 모듈 스코프 생성
모듈 실행 컨텍스트 생성
// 전역 변수 선언
const x = 1;
const y = 2;
// 함수 정의
function foo(a) {
// 지역 변수 선언
const x = 10;
const y = 20;
// 메서드 호출
console.log(a + x + y); // 130
}
// 함수 호출
foo(100);
// 메서드 호출
console.log(x + y); // 3
평가 과정 후 함수 코드가 순차적으로 실행
매개변수와 지역 변수에 값이 할당되고 console.log메서드 호출
console.log메서드를 호출하기 위해 식별자인 console을 스코프 체인을 통해 검색
console 객체의 프로토타입 체인을 통해 검색
식별자와 식별자에 바인딩된 값, 상위 스코프에 대한 참조를 기록하는 자료구조
스코프를 구분하여 식별자를 등록하고 관리하는 저장소 역할
실행 컨텍스트는
LexiclaEnvironment
VariableEnvironment
컴포넌트로 구성된다.
생성 초기에는 동일한 렉시컬 환경을 참조한다.
var x = 1;
const y = 2;
function foo (a) {
var x = 3;
const y = 4;
function bar (b) {
const z = 5;
console.log(a + b + x + y + z);
}
bar(10);
}
foo(20); // 42
전역 객체는 전역 코드가 평가되기 이전에 생성된다.
전역 객체도Object.prototype
을 상속받는다.
-> 전역 객체도 프로토타입 체인의 일원인다.
소스코드가 로드되면 전역 코드를 평가한다.
비어잇는 전역 실행 컨텍스트를 생성하여 스택에 푸시
스택의 최상위, 실행 중인 샐행 컨텍스트가 된다.
전역 렉시컬 환경을 생성하고 전역 실행 컨텍스트에 바인딩한다.
전역 환경 레코드는 전역 변수를 관리하는 전역 스코프, 전역 객체의 빌트인 전역 프로퍼티와 빌트인 전역 함수, 표준 빌트인 객체를 제공