호이스팅 예제

자바 스크립트 컴파일러는 변수 선언 전에 함수의 정의를 이동합니다. 다음 예제는 이를 증명합니다. 그러나 다음 예제는 극적으로 실패합니다. foo에 대한 변수 선언은 함수 호출 전에 게양됩니다. 그러나 foo에 대한 할당이 게양되지 않으므로 비기능 변수를 호출하기 위한 예외가 throw됩니다. 호이스팅은 (많은 개발자에게) 자바 스크립트의 알 수없는 또는 간과 된 동작입니다. 호이스팅은 선언을 맨 위로 이동하는 JavaScript의 기본 동작입니다. 변수를 선언하지만 초기화하지 않으면 변수가 자동으로 정의되지 않은 것으로 설정됩니다. 그래서 우리의 마지막 예를 다시 볼 수 있습니다. 아래 코드에서는 var a만; 우리가 아래 예제에서 볼 수 있듯이, var 반환 으로 만든 선언 정의 되지 않은 반면 let 및 const 반환 오류 (다음 을 제기 하 고 작성 에 대 한 gvlachos 신용): 우리가 ES5에 대해 이야기 할 때, 우리의 마음에 오는 변수 var. var로 게양하는 것은 let /const에 비해 다소 다릅니다.

var을 사용하고 호이스팅이 어떻게 작동하는지 보자 : 자바 스크립트는 매우 유연한 언어이며 거의 모든 곳에서 변수를 선언 할 수 있습니다. 예를 들어 다음 즉시 호출된 함수 식(IIFE)은 세 개의 변수를 선언한 다음 경고 대화 상자를 사용하여 표시합니다. 참고로 경고 상자를 사용해서는 안되지만 여기서 는 요점을 증명하려고 합니다. 호이스팅은 ECMAScript® 2015 언어 사양 이전에 는 규범 사양 산문에 사용되지 않는 용어입니다. Hoisting은 JavaScript에서 실행 컨텍스트(특히 생성 및 실행 단계)가 어떻게 작동하는지에 대해 일반적인 생각 방식으로 생각했습니다. 그러나 처음에는 개념이 약간 혼란스러울 수 있습니다. 자바 스크립트에서 Hoisting코드 실행 하기 전에 범위의 맨 위에 있는 모든 선언을 이동 하는 기본 동작입니다. 기본적으로 함수와 변수가 선언된 위치에 관계없이 범위가 전역인지 로컬인지 여부에 관계없이 범위의 맨 위로 이동한다는 이점이 있습니다. 코드에 함수를 쓰기 전에 함수를 호출할 수 있습니다.

호이스팅은 이해하기 쉽지만 종종 자바 스크립트 언어의 뉘앙스를 간과합니다. 게양에 대한 적절한 이해가 없으면 프로그램은 미묘한 버그에 취약합니다. 이러한 버그를 방지하기 위해 많은 개발자(및 linting 도구)는 모든 범위의 맨 처음에 단일 변수 선언 문을 옹호합니다. 이것은 자바 스크립트 인터프리터가 본질적으로 코드를 보는 방식이기 때문에 개인적으로 코드를 위반한 죄가 있더라도이 규칙에 대한 타당성이 있습니다. 예를 들어, 호이스팅의 엄격한 정의는 변수 및 함수 선언이 실제로 코드의 맨 위로 이동되었음을 시사하지만 실제로는 그렇지 않습니다.