주제
선 컴파일 후 실행 접근 방식을 취하지 않으면 명세서에서 요구하는 동작을 충족할 수 없습니다.
실제로 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"는 매개변수보다 더 아래쪽, 함수 본문에 있었는데 말이죠
프로그램 실행 전에 코드 전체가 파싱된다는 가정만이 이런 현상을 설명할 수 있는 유일한 답입니다.
주제
선 컴파일 후 실행 접근 방식을 취하지 않으면 명세서에서 요구하는 동작을 충족할 수 없습니다.
실제로 JS 엔진이 프로그램을 처리할 때 내부에서 일어나는 일은 인터프리테이션보다는 컴파일레이션에 훨씬 더 가깝습니다.
선정 이유
자바스크립트가 컴파일 언어라는 증명의 예시가 이해하기 쉽게 나와있어서 기억해두고 싶었습니다.
책 내용 (p140)
오류가 발생한 내용은 엄격모드 때문인데, 엄격 모드에서는 이름이 같은 함수 매개변수가 허용되지 않습니다.
JS 엔진은 어떻게 매개변수 greeting이 중복되었는지 알 수 있었을까요? 그리고 매개변수 목록을 처리하는 동안 함수 saySomething()을 엄격모드로 실행해야 한다는 건 어떻게 알 수 있었을까요? 전처리 구문 "use strict"는 매개변수보다 더 아래쪽, 함수 본문에 있었는데 말이죠
프로그램 실행 전에 코드 전체가 파싱된다는 가정만이 이런 현상을 설명할 수 있는 유일한 답입니다.