Skip to content

[4주차] 자바스크립트가 인터프리터 언어 보다 컴파일 언어에 가까운 예시 #15

Description

@ahnlook

주제

선 컴파일 후 실행 접근 방식을 취하지 않으면 명세서에서 요구하는 동작을 충족할 수 없습니다.
실제로 JS 엔진이 프로그램을 처리할 때 내부에서 일어나는 일은 인터프리테이션보다는 컴파일레이션에 훨씬 더 가깝습니다.

선정 이유

자바스크립트가 컴파일 언어라는 증명의 예시가 이해하기 쉽게 나와있어서 기억해두고 싶었습니다.

책 내용 (p140)

console.log("잘 지내시죠?")

saySomething("안녕하세요", "안녕")   // Uncaught SyntaxError: Duplicate parameter name not allowed in this context

function saySomething(greeting, greeting) {
  "use strict"
  console.log(greeting)
}

오류가 발생한 내용은 엄격모드 때문인데, 엄격 모드에서는 이름이 같은 함수 매개변수가 허용되지 않습니다.
JS 엔진은 어떻게 매개변수 greeting이 중복되었는지 알 수 있었을까요? 그리고 매개변수 목록을 처리하는 동안 함수 saySomething()을 엄격모드로 실행해야 한다는 건 어떻게 알 수 있었을까요? 전처리 구문 "use strict"는 매개변수보다 더 아래쪽, 함수 본문에 있었는데 말이죠

프로그램 실행 전에 코드 전체가 파싱된다는 가정만이 이런 현상을 설명할 수 있는 유일한 답입니다.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions