2. 실행 콘텍스트

코어 자바스크립트 02_실행 콘텍스트


실행 콘텍스트

  • ES5에서 동일한 조건/환경을 지니는 것은(= 실행 콘텍스트를 구성하는 방법은) 함수밖에 없다. (전역공간도 하나의 함수라고 봄)
    => 실행 콘텍스트는 함수를 실행할 때 필요한 환경정보 또는 이를 담은 객체
  • 실행 콘텍스트는 활성화되는 시점에 VariableEnvironment, LexicalEnvironment, ThisBinding 세 가지 정보를 수집.
  • ES66에서는 블록에 의해서도 새로운 실행 콘텍스트가 생성됨(블록 스코프...if문, 반복문 등)

Call Stack 콜스택

  • 현재 어떤 함수가 동작하고 있는지, 다음에 어떤 함수가 호출되어야 하는지 등을 제어하는 자료구조.

  • stack : 우물같은 구조. 가장 마지막에 들어온 게 가장 빨리 빠지는 개념. 콜스택은 실행에 관한 것.

VariableEnvironment

  • LexicalEnvironment의 초기 상태 (스냅샷)

LexicalEnvironment

  • 함수 실행 도중에 변경되는 사항이 실시간으로 반영.

environmentRecord와 호이스팅

  • environmentRecord에는 현재 문맥의 식별자 정보 = Hoisting 호이스팅된 식별자 정보들이 저장됨.
  • 매개변수 식별자, 함수 자체, var로 선언된 변수의 식별자

호이스팅 규칙

  • 변수는 선언부만, 함수 선언은 함수 전체를 호이스팅.
  • 함수 표현식은 변수 선언부만 호이스팅
  • 호이스팅이 끝난 상태에서의 함수 선언문은 함수명으로 선언한 변수에 함수를 할당한 것처럼 여길 수 있음
    function b() {} //호이스팅된 함수 선언
    var b = function b() {} //함수명으로 선언한 변수에 함수 할당

함수 선언문과 함수 표현식

  • 함수 선언문 : function 정의부만 존재. 별도의 할당 명령 없음.
  • 함수 표현식: 정의한 함수를 별도의 변수에 할당
  • 상대적으로 함수 표현식이 안전하다. (함수가 중복 선언되어 코드가 꼬이는 것을 막기 위해)
  • 함수 선언문
function a() {~~}
a(); //실행 OK

(익명) 함수 표현식
: 변수명 b가 곧 함수명

var b = function () {~~}
b(); //실행 OK 

기명 함수 표현식
: 변수명은 c, 함수명은 d

var c = function d() {~~}
c(); //실행 OK
d(); //에러!

스코프, 스코프 체인, outerEnvironmentReference

  • outerEnvironmentReference는 바로 직전 콘텍스트의 LexicalEnvironment 정보를 참조.
  • 스코프: 변수의 유효범위

스코프 체인 Scope Chain

  • '식별자의 유효범위'를 안에서부터 바깥으로 차례로 검색해나가는 것.

  • 자신의 environmentRecord부터 식별자 찾기 시작해서 없으면 outerEnvironmentReference를 타고 하나씩 외부로 나가는 것.

  • 더 외부의 스코프에 동일한 식별자가 또 있더라도 자신과 가장 가까운 식별자만 접근 가능.(변수 은닉화)

  • 스코프 체인을 가능하게 하는 것이 outerEnvironmentReference.

    (inner의 outerEnvironmentReference는 outer의 LexicalEnvironment)

자신보다 바깥에 있는 함수의 식별자에는 접근할 수 있지만 안에 있는 함수의 식별자에는 접근할 수 없다.

전역변수와 지역변수

  • 전역변수 : 전역 공간에서 선언한 변수
  • 지역변수 : 함수 내부에서 선언한 변수

this

  • 실행 콘텍스트의 thisBinding에는 this로 지정된 객체가 저장.
  • 실행 컨텍스트 활성화 당시에 this가 지정되지 않은 경우 this에는 전역 객체가 저장됨.

좋은 웹페이지 즐겨찾기