키워드 | 스코프 | 재선언 | 재할당 |
---|---|---|---|
var | function-level scope | 가능 | 가능 |
let | block-level scope | 불가 | 가능 |
const | block-level scope | 불가 | 불가 |
변수 선언 키워드는 var
, let
, const
3가지가 전부다. 변수 선언에 의해 확보된 메모리 공간은 undefined라는 값이 암묵적으로 할당되어 초기화된다. 덕분에 값을 할당하지않고 변수를 참조할 경우 쓰레기값이 나올 수 있는 위험으로 부터 안전하다.
변수, 식별자 등 모든 선언문은 런타임 이전에 실행되고 값의 할당은 런타임에 실행된다. 이에 따라 변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 특징을 뜻한다.
console.log(score); // undefined
var score;
c++이나 자바, 파이썬 같으면 에러가 발생했을 이 코드. 변수 선언 이전에 변수를 사용해도 자바스크립트에서는 에러가 발생하지 않는다. 단, var인 경우만 해당되고, let과 const인 경우 에러가 발생한다.
변수에 값을 재할당 할 경우 이전 값 80이 저장되어 있던 메모리 공간을 지우고 그 공간에 재할당 값 90을 새롭게 저장하지 않는다. 새로운 메모리 공간을 확보해서 값을 저장한다. 이전 값 undefined와 80은 불필요한 값으로 가비지 컬렉터
에 의해 메모리에서 자동 해제된다. 단, 메모리에서 언제 해제될지는 예측할 수 없다.
애플리케이션이 할당한 메모리 공간을 주기적으로 검사하여 더이상 사용되지 않는 메모리를 해제하는 기능으로, 메모리 누수를 방지한다.
자바스크립트
와 같이 가비지 컬렉터를 내장하고 있는 언어.c언어
가 언매니지드 언어. malloc()
, free()
와 같은 저수준의 메모리 제어 기능을 제공. 자바스크립트를 공부하면서 새롭게 알게된 내용과 자바스크립트의 독특한 특징 위주로 내용을 정리해봤다.
모던 자바스크립트 Deep Dive, 이웅모 (2020)