자바스크립트는 인터프리터 언어이다.
인터프리터는 위에서부터 한 줄씩 순서대로 실행된다는 특징이 있다.
위 말대로라면

요렇게 쓰면 참조에러가 뜰 게 분명하다
띠용?
분명 에러가 떠야 하는데 undefined가 나왔다
왜그러냐면 변수 선언은 런타임(소스코드가 한 줄씩 순차적으로 실행되는 시점) 전에 실행되기 때문.
쉽게 비유하면 자바스크립트는 행군(내가 준 소스코드를 실행)에 앞서 군장검사를 한다
여기서 과자(변수나 함수 선언문 등)가 나온다? 너 다 먹고 가
그래서 해당 과자를 다 먹으면(선언) 그제서야 출발한다.
결론적으로 변수 선언은 소스코드의 위치와 상관이 없다는 것.
이렇게 아무데나 변수 선언문을 놔도 코드 맨 처음에 놓은 것처럼 동작하는게 변수 호이스팅(variable hoisting)이다. 변수가 아닌 다른 모든 식별자도 같은 성격을 띤다.
'Web development > Modern JavaScript Deep Dive' 카테고리의 다른 글
모던 자바스크립트 Deep Dive(식별자 네이밍 규칙) (0) | 2023.03.18 |
---|---|
모던 자바스크립트 Deep Dive(값의 할당과 재할당, 매니지드 언어와 언매니지드 언어) (0) | 2023.03.18 |
모던 자바스크립트 Deep Dive(변수 선언) (0) | 2023.03.18 |
모던 자바스크립트 Deep Dive(논리연산자를 이용한 단축 평가, 옵셔널 체이닝 연산자, null 병합 연산자) (0) | 2023.03.17 |
모던 자바스크립트 Deep Dive(암묵적 타입 변환, 명시적 타입 변환) (0) | 2023.03.15 |