chapter 15-00

자바 스크립트의 변수

자바스크립트에 있는 다양한 자료형들은, 다른 언어와 유사합니다. 하지만, C 계열 언어에서는 이 자료형이 어떤 자료형인지를 명시해 주어야 했습니다:

int i;

이렇게 자료형을 명시해 주어야 하는 언어를 강타입(strongly-typed)언어라고 합니다. 반면, 자바스크립트는 약타입(weakly-typed)언어입니다. 자바스크립트는 해당 값이 어떤 타입인지 명시할 필요가 없습니다. 해당 변수가 무슨 타입인지는 인터프리터가 알아서 해석합니다.

var, let, const, 호이스팅

자바 스크립트의 변수는 지역변수와 전역변수로 나뉜다고 하였습니다. 이 중 지역변수를 선언할 때, 변수 앞에 붙여야 하는 키워드 세 종류입니다. 전역변수를 선언할 때는 키워드 없이 그냥 변수 이름만 적으면 됩니다.

var

ES6(자바스크립트 표준) 이전 자바스크립트에서 쓰이던 지역변수 키워드입니다.

  1. 재선언과 재할당이 가능합니다.

  2. 오직 함수 레벨 스코프만을 지역 스코프로 인식합니다. 즉, 함수 스코프 안에서 사용될 때만, 지역변수로 인식합니다. if, for, try/catch등 함수가 아닌 스코프에서 선언되는 경우 전역변수로 취급됩니다.

let, const

  1. let의 경우 재할당은 가능하지만, 재선언은 불가능합니다. C나 자바에서 쓰이는 변수와 가장 비슷한 형태입니다.

  2. const는 재할당과 재선언이 모두 불가능합니다. 단, 참조 타입의 경우 재할당이 가능합니다.

  3. const는 선언과 초기화가 동시에 진행되어야 합니다. 그렇지 않을 경우 Syntax Error를 출력합니다.

  4. const와 let은 모든 코드 블록(함수, if, for, while, try/catch 문 등)을 지역 스코프로 인식합니다.

호이스팅

호이스팅이란, 자바스크립트에서 변수의 선언과 할당을 분리하여 선언을 스코프의 가장 윗 부분으로 끌어올리는 것을 말합니다. 자바스크립트 엔진이 코드를 해석할 때, 한 줄씩 해석 하는 것이 아니라, 변수와 함수 선언문을 모두 찾아서 선언과 할당을 분리한 후, 선언부를 스코프의 맨 위로 올려서 해석합니다. 이러한 과정을 호이스팅이라고 합니다.

var와 let, const의 호이스팅 가능 여부

console.log(i, j, k);
var i = 10;
let j = 10;
const k = 10;

위의 선언문들이 인터프리터에 들어가면, 호이스팅을 통해 다음과 같이 분리됩니다:

var i;
let j;
const k;
console.log(i, j, k);
i = 10;
j = 10;
k = 10;
  1. i는 undefined로 출력됩니다.

  2. j와 k는 호이스팅이 되긴 하지만, 위의 경우 출력이나 참조가 불가능합니다. 이를 일시적 사각지대(Temporal Dead Zone: TDZ)에 있다고 표현합니다.

즉, let, var, const 모두 호이스팅이 되긴 하지만, let과 const는 undefined로 할당되는 것이 아니라 TDZ에 위치하게 되어 참조가 불가능하게 됩니다.

Last updated