본문 바로가기

Language/Java Script

자바스크립트 실행 컨텍스트

1. 실행 컨텍스트 정의

  - 실행 가능한 코드를 형상화하고 구분하는 추상적인 개념

  - 실행 가능한 자바스크립트 코드 블록이 실행되는 환경

    1) 전역 코드

    2) eval() 함수로 실행되는 코드

    3) 함수안의 코드를 실행할 경우

  - 코드가 실행되면 실행 컨텍스트가 생성되고 실행 컨텍스트는 스택 안에 하나씩 차곡차곡 쌓이고, 제일 위에 위치하는 실행 컨텍스트가 현재 실행되고 있는 컨텍스트

  - 실행 컨텍스트의 생성

    · 현재 실행되는 컨텍스트에서 이 컨텍스트와 관련 없는 실행 코드가 실행되면, 새로운 컨텍스트가 생성되어 스택에 들어가고 제어권이 그 컨텍스트로 이동한다.

 

console.log("This is global context");

function ExContext1(){
	console.log("This is ExContext1");
};

function ExContext2(){
	ExContext1();
    console.log("This is ExContext2");
};

ExContext2();
//출력 결과
//This is global Contxt
//This is ExContext1
//This is ExContext2

※ 콜스택에 push(글로벌) push(Ex2) push(Ex1) pop(Ex1) pop(Ex2)로 동작된다.

 

2. 실행 컨텍스트 생성 과정

  1) 활성 객체(변수 객체) 생성

    - 실행 컨텍스트가 생성되면 자바스크립트 엔진은 해당 컨텍스트에서 실행에 필요한 여러가지 정보를 담은 객체를 생성하는데 이를 활성객체라고 한다.

  2) arguments 객체 생성

    - 앞서 만들어진 활성 객체는 arguments 프로퍼티로 이 arguments 객체를 참조한다.

  3) 스코프 체인 생성

    - 현재 컨텍스트의 유효 범위를 나타내는 스코프 정보를 생성한다. Linked List로 만들어짐

    - 현재 컨텍스트에서 특정 변수에 접근해야 할 경우, 이 리스트를 활용한다.

    - 이 리스트로 현재 컨텍스트의 변수뿐 아니라 상위 실행 컨텍스트의 변수도 접근이 가능하다.

    - 이 리스트를 스코프 체인이라고 하는데 [[scope]] 프로퍼티로 참조된다.

  4) 변수 생성

    - 지역변수의 생성

    - 변수나 내부 함수를 메모리에 생성하고 초기화하는 과정은 각 변수나 함수에 해당하는 표현식이 실행되기 전까지는 이루어지지 않는다.

  5) this 바인딩

    - this가 참조하는 객체가 없으면 전역객체를 참조한다.

  6) 코드 실행

    - 전역 실행 컨텍스트는 arguments 객체가 없으며, 전역 객체 하나만을 포함하는 스코프체인이 있다.

    ※ 브라우저 : var 전역객체, Node.js는 var 은 지역변수, var가 없으면 전역변수