[기술면접/JS] 소스코드 평가와 실행

강민혁·2023년 3월 6일
0

기술면접 | JS

목록 보기
14/17

JS에서 소스코드 평가와 실행 과정에 대해 설명하세요

Keyword

평가, 실행, 실행 컨텍스트, 렉시컬 환경, 환경 레코드, 변수, 함수, 식별자, 소스코드, 런타임, 참조, 스코프 체인, 전역 스코프, 전역 변수, 전역 함수, 전역 객체, property, method, 지역 스코프, 매개변수, 지역 변수, this 바인딩


Script

자바스크립트 엔진에서 소스코드는 '평가'와 '실행'의 과정으로 나누어 처리됩니다.

먼저, 평가 과정에서는 실행 컨텍스트를 생성하고, 그 실행 컨텍스트에 있는 렉시컬 환경의 환경 레코드에 변수와 함수 식별자를 등록합니다. 이 평가 과정이 끝나면, 순차적으로 소스코드가 실행됩니다. 이것을 런타임이라고 하는데, 이 과정에서 필요한 변수나 함수의 참조는 실행 컨텍스트가 관리하는 스코프 체인에서 검색하여 취득하고 값의 변경이 발생하면 해당 스코프 체인 자료구조의 내용을 변경합니다.

조금 더 자세한 과정을 설명드리면, 평가와 실행 과정은 실행 컨텍스트 단위로 진행됩니다. 먼저, 최상위 스코프의 전역 코드를 평가하고, 전역 스코프에 전역 변수와 전역 함수를 등록하며, 전역 객체의 property와 method로 등록합니다.

그리고 전역 코드가 실행되다가, 함수가 호출되면, 함수를 평가하는 과정을 거칩니다. 마찬가지로, 함수의 지역 스코프에 매개변수와 지역 변수 등을 등록하고 스코프 체인에 등록합니다. 그리고 여기서 this 바인딩도 결정됩니다. 그리고 함수 코드를 실행하고 실행이 완료되면 다시 전역 코드 실행이 진행됩니다.


Additional

소스코드의 타입

소스코드의 타입에 따라서 실행 컨텍스트의 생성 과정과 관리 내용이 다르다.

  • global code(전역 코드)
    전역에 존재하는 소스코드, 전역에 정의된 함수, 클래스 등의 내부코드는 포함하지 않는다.
    [실행 컨텍스트 관리 내용]
    전역 코드는 최상위 스코프인 전역 스코프를 필요로 한다. 그리고 전역 변수, 전역 함수를 global 객체의 property와 method로 바인딩하기 위해 전역 객체와 연결되어야 한다. 그래서 전역 코드가 평가되면 '전역 실행 컨텍스트'가 생성된다.

  • funciton code(함수 코드)
    함수 내부에 존재하는 소스코드, 함수 내부에 중첩된 함수, 클래스 등의 내부코드는 포함하지 않는다.
    [실행 컨텍스트 관리 내용]
    함수 코드는 지역 스코프를 필요로 하고, 지역 변수, 매개변수, arguments 객체를 관리해야한다. 그리고 생성된 지역 스코프를 스코프 체인에 연결해야 한다. 그래서 함수 코드가 평가되면, 함수 실행 컨텍스트가 생성된다.

  • eval code(eval 코드)
    build-in 전역 함수인 eval 함수에 arguments로 전달되어 실행되는 소스코드를 말한다.
    [실행 컨텍스트 관리 내용]
    eval 코드는 strict mode에서 자신만의 독자적인 스코프를 생성한다. eval 코드가 평가되면 eval 실행 컨텍스트가 생성된다.

  • module code(모듈 코드)
    모듈 내부에 존재하는 소스코드, 모듈 내부의 함수, 클래스 등의 내부 코드는 포함되지 않는다.
    [실행 컨텍스트 관리 내용]
    모듈 코드는 모듈별로 독립적인 모듈 스코프를 생성한다. 그래서 모듈 코드가 평가되면, 모듈 실행 컨텍스트가 생성된다.


Reference

BOOK - modern javascript deep dive

profile
with programming

0개의 댓글