[javascript] 호이스팅과 변수 선언
2980 단어 JavaScriptJavaScript
선언과 초기화
js 엔진은 선언 단계와 초기화 단계를 거쳐서 변수 선언을 수행함
- 선언 단계 : 변수 이름을 실행 컨텍스트에 등록해 js엔진에 변수의 존재를 알림
- 초기화 단계 : 값을 저장하기 위한 메모리 공간을 확보, 암묵적으로 undefined를 할당
실행 컨텍스트 : js엔진이 소스코드를 평가하고 실행하기 위해 필요한 환경을 제공하고 코드의 실행 결과를 실제로 관리하는 영역. js 엔진은 실행 컨텍스트를 통해 식별자와 스코프를 관리함
호이스팅
변수 선언의 실행 시점은 런타임 이전의 평가 과정이다. 이 때문에 변수 선언이 코드의 맨 앞으로 간 것처럼 보이는 현상을 변수 호이스팅이라 함
- var 키워드로 선언된 변수는 선언시에 undefined로의 초기화도 동시에 일어남
console.log(a); // reference error가 아닌 undefined이 출력된다
var a;
var의 단점과 let, const 호이스팅
var키워드는 블록 레벨 스코프를 지원하지 않고 함수 레벨 스코프를 지원하기 때문에 의도치 않게 전역 변수가 선언되어 부작용을 발생 시킬 수 있음 → 블록 레벨 스코프를 지원하는 let, const 등장
let, const로 선언한 변수 또한 호이스팅이 일어남. 하지만 선언과 동시에 undefined가 초기화되는 var과는 다르게 let과 const는 선언과 초기화가 분리되어있기 때문에 호이스팅이 일어나지 않는 것처럼 보임.
console.log(a); // reference error
let a;
console.log(a); // undefined
a = 0;
console.log(a); // 0
let a = 0;
{ // 블록 스코프 생성
console.log(a); // reference error 발생
// 호이스팅이 일어나지 않았다면 상위 스코프 변수 a의 값이 출력되어야 함
let a;
}
참고 자료 : 모던자바스크립트 Deep Dive - 이웅모 저
Author And Source
이 문제에 관하여([javascript] 호이스팅과 변수 선언), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@fffo/ijg0j3hy저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)