변수 : 프로그래밍 언어에서 데이터를 관리하기 위한 핵심 개념
'10 + 20' 을 컴퓨터에게 시켜보자.
먼저, 자바스크립트 엔진도 사람처럼 자바스크립트 코드를 실행한다.
연산 결과를 한 번만 사용한다면 문제가 없겠지만, 연산 결과 30을 재사용하고 싶다면 메모리 주소를 통해 연산 결과 30이 저장된 메모리 공간에 직접 접근하는 것 외에 방법이 없다.
하지만, 보안 상 개발자의 직접적인 메모리 제어를 허용하지 않는다.
(만약, 직접 메모리 제어를 허용하더라도 값이 저장될 메모리 주소는 코드가 실행될 때마다 변경된다)
프로그래밍 언어는 기억하고 싶은 값을 메모리에 저장하고, 저장된 값을 읽어들여 재사용하기 위해 변수라는 매커니즘을 제공한다.
즉, 변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름이다. (쉽게 말해, 값의 위치를 가리키는 존재)
자바스크립트를 처음 공부할 때는 '선언(declaration)'과 '할당(assignment)'의 개념을 혼용해서 사용하고 있었다. 둘이 똑같은 건 줄 알았다. 그러다보니 다음과 같은 코드를 마주칠 때 문제가 발생했다.
console.log(score);
var score = 80;
착각) 호이스팅되어 score는 80이 출력될 것이다.
실제) undefined가 출력
이전까지 호이스팅의 개념을 '선언'을 해주면 값이 할당된다고 생각했지만 그게 아니었다!!
먼저, undefined가 출력되는 이유는 변수 선언은 소스코드가 순차적으로 실행되는 시점인 런타임 이전에 먼저 실행되지만, 변수 할당은 소스코드가 순차적으로 실행되는 시점인 런타임에 실행되기 때문이다.