자바스크립트에서의 변수

Javascript

변수

프로그래밍 언어는 기억하고 싶은 값을 메모리에 저장하고, 저장된 값을 읽어 들여 재사용하기 위해 변수라는 메커니즘을 사용

하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름을 말한다.

var vs const, let

함수 레벨 스코프(Function-level Scope) #

함수 내에서 선언된 변수는 함수 내에서만 유효하며 함수 외부에서는 참조할 수 없고, 함수 내부에서 선언한 변수는 지역 변수이다. 함수 외부에서 선언한 변수는 모두 전역 변수이다.

블록 레벨 스코프(Block-level Scope) #

모든 코드 블록 내에서 선언된 변수는 코드 블록 내에서만 유효하며 코드 블록 외부에서는 참조할 수 없다. 코드 블록 내부에서 선언한 변수는 지역 변수이다. 예를들어 if문 등

변수 선언

변수를 선언하고 값을 할당하지 않으면, 원시 타입의 값 undefinded 를 할당해 초기화 한다. 즉 선언 단계와 초기화 단계가 동시에 진행된다. var a; a라는 변수 이름을 등록하고, 초기화 단계를 통해 a에 undefinded를 할당해 초기화한다.

실행 컨텍스트는 JS 엔진이 소스코드를 평가하고 실행하기 위해 필요한 환경을 제공하고 코드의 실행 결과를 실제로 관리하는 영역이다.

변수 선언이 소스코드의 어디에 있든 상관없이 다른 코드보다 먼저 실행된다. 즉 소스코드의 어디에 위치하는지와 상관없이 어디서든지 변수를 참조할 수 있다. 변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 특징을 호이스팅 이라고 한다. 다만 선언은 런타임 이전에 먼저 실행되지만 값의 할당은 런타임에 실행된다.

기존에 저장되어 있는 메모리 공간을 지우고 재할당된 값을 저장하는 것이 아니라 새로운 메모리 공간에 저장한다. 이후에 가비지 콜렉터가 더 이상 사용하지 않는 메모리를 해제하여 관리하므로 우리는 메모리를 따로 관리하지 않아도 된다.