JavaScript가 변수를 호이스트하는 이유는 무엇입니까?
설계자가 호이 스팅을 구현하기로 결정한 이유는 무엇입니까? 이 작업을 수행하는 다른 인기있는 언어가 있습니까?
문서 및 / 또는 기록에 대한 관련 링크를 제공하십시오.
JavaScript가 변수를 호이스트하는 이유는 무엇입니까?
설계자가 호이 스팅을 구현하기로 결정한 이유는 무엇입니까? 이 작업을 수행하는 다른 인기있는 언어가 있습니까?
문서 및 / 또는 기록에 대한 관련 링크를 제공하십시오.
div
jQuery를에
답변:
Stoyan Stefanov가 "JavaScript Patterns"책에서 설명했듯이, 게양은 JavaScript 인터프리터 구현의 결과입니다.
두 단계로 수행되는 JS 코드 해석. 첫 번째 패스 동안 인터프리터는 변수 및 함수 선언을 처리합니다.
두 번째 단계는 실제 코드 실행 단계입니다. 인터프리터는 함수 식과 선언되지 않은 변수를 처리합니다.
따라서 이러한 동작을 설명하기 위해 "게양"개념을 사용할 수 있습니다.
"var 호이 스팅은 기능 호이 스팅의 의도하지 않은 결과, 블록 범위 없음, [그리고] JS는 1995 년 러시 작업이었습니다."
"기능 호이 스팅은 하향식 프로그램 분해를 허용하고, 무료로 're rec'를 사용하고, 선언하기 전에 호출합니다. var 호이 스팅은 함께 태그가 지정됩니다."
같은 방식으로 변수를 끌어 올리는 다른 인기있는 언어는 없습니다. Flash 개발에 사용되는 ECMAScript의 또 다른 구현 인 ActionScript조차도 호이 스팅을 구현하지 않은 것 같습니다. 이것은 JavaScript를 배우는 다른 언어에 익숙한 개발자들에게 혼란과 좌절의 원천이었습니다.
업데이트 : 주석에서 Python은 유사한 가변 호이 스팅 동작을 가지고 있습니다 .
이는 자바 스크립트 인터프리터가 두 주기로 코드를 해석하기 때문입니다.
첫 번째 사이클에서 모든 변수 및 함수 선언은 실행중인 함수 범위의 맨 위로 이동합니다. 이는 실행되기 전에 variableObjects
for execution context
함수 를 만드는 데 도움이됩니다 .
2 단계에서는 값 할당, 코드 문 및 함수 호출이 예상되는 방식으로 한 줄씩 발생합니다.
그것은 당신에게 행동 약 더 나은 사진을 줄 것이다 let
, const
그리고 class
선언은 변수와 함수 사이에 다음과 같은 우선 순위를.