var result;
var 키워드로 변수를 선언하면 자바스크립트 엔진은 값을 저장하기 위한 준비를 한다.
변수 선언문이 실행되면 아래의 두 단계를 거친다.
① 변수 이름을 등록하고 값을 저장할 메모리 공간을 확보한다.
② 확보된 메모리에 undefined 를 할당한다.
왜 undefined 를 할당할까 ❓
만약 undefined 를 할당하지 않고 ①번 과정만 수행한다고 가정해보자.
확보된 메모리 공간에는 이전에 할당되었던 쓰레기 값이 존재할 것이다.
왜 쓰레기 값이 존재할까 ❓
var result = 100;
result = 200;
왜 쓰레기 값이 존재하는지 설명하기 위해 예시를 들어보겠다.
위의 코드에서 result 변수에 처음 100을 할당하고
그 다음에 200을 재할당한다.
이때 이전 값 100이 저장되어 있는 메모리 공간을 지우고 그 메모리 공간에 200을 새롭게 저장하는 것이 아니라 새로운 메모리 공간을 확보하고 그 메모리 공간에 200을 저장한다.
따라서 result 식별자는 200이 저장된 메모리 공간과 연결되며
이전에 100이 저장되어 있던 메모리 공간은 어떤 식별자와도 연결되어 있지 않다.
이처럼 메모리 상에는 더이상 사용하지 않아 어떤 식별자와도 연결되어 있지 않은 값들이 많다.
이러한 불필요한 값들을 쓰레기 값이라고 한다 ❗️
자바스크립트는 개발자가 변수를 초기화하지 않고 선언만 했을 때 실수로 쓰레기 값을 사용하지 않도록 undefined 라는 데이터 타입으로 초기화한다.
null 은 변수에 값이 없다는 것을 개발자가 의도적으로 명시할 때 사용한다.
var result = 100;
result = null;
변수에 null 을 할당하는 것은 변수가 이전에 참조하던 값인 100을 더 이상 참조하지 않겠다는 의미다.
따라서 기존의 식별자와 연결 고리를 끊어버리는 것이다.
null 은 변수에 값이 없다는 것을 드러내기 위해 개발자가 의도적으로 할당하는 값이다.
그러나 undefined 는 선언이 되고 초기화되지 않았기 때문에 자바스크립트 엔진이 할당하는 값이다.
따라서 변수에 undefined 가 할당되어 있으면 초기화되지 않은 변수라는 의미가 더 강하다.
앞으로 사용할 것이지만 초기화되지 않은 변수와
의도적으로 값을 비워둔 변수에는 큰 차이가 있다 ❗️
null 과 undefined 의 차이는 바로 이런 것이다.
-끝-