자바 스크립트로 게양 === 컴파일 중?


9

최근 취업 면접에서 흥미로운 관점을 발견했습니다.

Javascript에서 게양은 스크립트의 맨 위에서 변수 선언 및 함수 선언을 이동하는 것입니다. 이 단계를 컴파일 이라고 부를 수 있습니까 ?

Javascript 인터프리터가 첫 번째 패스에서 게양을 수행하는 두 번째 패스와 실제로 스크립트를 실행하는 입력 스크립트를 2 패스한다는 사실을 알고 있습니다. Javascript가 해석되는 언어라는 것을 알고 있었기 때문에이 질문은 약간 혼란 스러웠습니다.

답변:


18

아니오. 호이 스팅은 편집이 아닙니다.

호이 스팅은 변수와 함수 선언이 포함 범위의 맨 위로 이동 될 때 컴파일 중에 발생하는 상황을 설명하기 위해 개발자가 만든 개념입니다 .

컴파일은 Javascript 코드가 다른 표현 (보통 일종의 실행 코드)으로 바뀌어 현재 또는 나중에 실행될 때 발생합니다. Chrome의 V8 자바 스크립트 엔진에는 실제로 두 개의 컴파일러가 있습니다. 하나는 지금 빠르고 더러운 실행 코드를 작성하고 다른 하나는 나중에 최적화 된 코드를 작성합니다.

프로그래밍 언어는 "컴파일 된"또는 "통역 된"언어로 정의되지 않습니다. 오히려 언어는 필요에 따라 해석되거나 컴파일됩니다.

V8 엔진의 작동 원리
를 Javascript로 자세히 읽기


1
: 해석 언어의 위키 피 디아 기사는 "해석"대 "컴파일"의 구분에도 도움이된다 en.wikipedia.org/wiki/Interpreted_language

이것을 올바르게 이해하고 있다면 호이 스팅은 스크립트를 기계가 읽을 수있는 코드로 변환하지 않으므로 컴파일 되지 않습니다 . 내가 맞아? :)
Rahul Desai

내 대답의 두 번째 단락을 다시 읽으십시오.
Robert Harvey

1
최근이 주제에 대해 인터뷰 한 사람과 대화를 나눈 후 , Kyle Simpson이 Bash 스크립팅과 비교하면 컴파일이라고 설명하는 FrontendMasters.com의 Advanced JS 과정에 대한 참조를 나에게주었습니다. 4 번 라인에있는 동안 4 번 라인에 무엇을 기대해야할지 모릅니다. 그러나 JS 컴파일러의 경우 호이 스팅 패스 도중 4 번 라인에있는 것을 보았습니다. 다른 언어와 달리 이진 코드로 변환되지 않습니다. Javascript는 실행될 때마다 컴파일됩니다.
Rahul Desai
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.