코드 실행과정

shin·2021년 5월 19일
0

javascript

목록 보기
2/23

컴파일네이션

  • 자바스크립트는 컴파일러 언어라고도함
  • 컴파일레이션은 코드가 실행되기 직전에 일어난다

컴파일네이션 단계

  • 토크나이징 / 렉싱 : 코드를 의미있는 조각으로 만드는 과정
    ex) var a = 1; => var, a, =, 2, ;
  • 파싱 : 문법 구조를 반영하여 중첩 원소를 갖는 트리형태(AST)로 바꾸는 과정
  • 코드생성 : AST를 실행코드로 바꾸는 과정

엔진, 컴파일러, 스코프 이해

  • 코드의 해석(컴파일) 관점에서, 코드의 실행의 관점에서 옮겨 보면 엔진, 컴파일러, 스코프가 상호작용하게 된다.
    • 엔진 : 컴파일레이션 시작부터 끝까지 모든과정과 프로그램 실행을 책임진다.
    • 컴파일러 : 파싱, 코드생성
    • 스코프 : 선언된 변수 목륵을 작성하고 유지

실행

var a = 1;

  1. 컴파일러가 var a를 만나면 해당 스코프 안에 변수 a가 있는지 체크
  2. 있으면 선언을 무시하고, 없으면 스코프 안에 a를 선언하라고 요청
  3. 그 후 컴파일러는 a = 1 대입문을 처리하기 위해 엔진이 실행 할수 있는 코드를 생성
  4. 엔진이 실행하는 코드가 먼저 스코프에 a 라는 변수가 현재 스코프 내에서 접근할 수 있는지 확인
  5. 접근 가능하면 엔진은 변수 a를 사용, 아니라면 상위 스코프에서 탐색
  6. 전역스코프에서도 찾지 못하면 에러 발생

LHS, RHS

  • LHS(Left-hand Side) 검색 : 값을 대입할 변수 컨테이너를 찾는것
  • RHS(Right-hand Side) 검색 : 변수의 값을 찾는것

컴파일러가 생성한 코드를 실행할 때 엔진은 변수 a 가 생성된 적이 있는지 스코프에서 검색한다.

function foo(a){
       console.log(a);
}
foo(2);
  1. foo(2)가 실행되면서 참조할수 있는 foo함수가 있는지 RHS 검색
  2. 스코프에 참조 가능한 foo가 있으므로 에러 없이 foo(2) 실행
  3. foo의 파라미터인 a는 LHS검색으로 foo(a=2)와 같이 할당
  4. 참조 할 수있는 console 객체가 있는지 RHS 검색
  5. console은 전역스코프에 선언되어 있으므로 오류 없이 실행
  6. console.log의 파라미너 a는 console.log(a=2) LHS로 할당

0개의 댓글