Post

Deep Dive 04.변수

변수

변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름을 말한다. 더 간단히 정리하자면, 값이 저장된 메모리의 위치를 가리키는 상징적인 이름이 변수이다.

식별자

변수의 이름을 식별자(identifier)라고도 한다. 식별자는 어떤 값을 구별해서 식별할 수 있는 고유한 이름을 말한다.

변수 선언

변수 선언이란 메모리 공간을 확보(allocate)하고 변수와 확보된 메모리 공간을 연결(name binding)해서 값을 자장 할 수 있게 준비하는 것이다.

선언을 할 때는 var, let, const 키워드를 사용한다.

var 키워드의 단점은 블록 레벨 스코프를 지원하지 않고 함수 레벨 스코프를 지원한다는 것이다.

자바스크립트 엔진은 변수 선언을 선언 단계, 초기화 단계로 나누어 진행한다.

  • 선언단계 : 변수 이름을 등록해서 자바스크립트 엔진에 변수의 존재를 알림.
  • 초기화 단계 : 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당하여 초기화 한다.

모든 식별자는 실행 컨텍스트에 등록된다.

호이스팅

1
2
3
4
// 변수 호이스팅에 의해 ReferenceError가 발생하지 않는다.
console.log(score); // undefined

var score; // 변수 선언문

변수 선언은 런타임이 아니라 그 이전 단계(소스코드 평가 과정)에서 일어난다. 따라서 변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 변수 호이스팅이 발생한다.

값의 할당

1
var scroe = 80; // 변수 선언과 값의 할당

변수 선언은 소스코드가 순차적으로 실행되는 시점인 런타임 이전에 먼저 실행되지만 값의 할당은 런타임에 실행된다.

Desktop

변수에 값을 할당할 때는 이전 값 undefined가 저장되어 있던 메모리 공간을 지우고 그 메모리 공간에 할당 값 80을 새롭게 저장하는 것이 아니라 새로운 메모리 공간을 확보하고 그곳에 할당 값 80을 저장한다.

자바스크립트는 managed language로 메모리의 할당 및 해제를 위한 메모리 관리 기능을 언어 차원에서 담당한다.

This post is licensed under CC BY 4.0 by the author.