1 분 소요

## 변수란..?🍍

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

변수의 선언은 var, let, const 키워드로 할 수 있고 ES6에서 let과 const가 추가되었다.

1. Var 재선언 재할당 가능

var LJH = '사람'; // 변수 선언,  할당



var LJH = '동물'; // 재선언, 재할당

다음과 같이 LJH를 재선언하고 동시에 사람->동물로 재할당을 하여도 Error가 없다.

또한 특별하게 변수를 선언하기전 참조가 가능하다

이것이 가능한 이유는 변수 선언이 런타임에서 되는 것이 아니라, 그 이전 단계에서 먼저 실행되기 때문이다.

자바스크립트 엔진은 소스코드를 한 줄씩 순차적으로 실행하기에 앞서, 변수 선언을 포함한 모든 선언문(ex. 변수 선언문, 함수 선언문 등)을 찾아내 먼저 실행한다.

즉, 변수 선언이 어디에 있든 상관없이 다른 코드보다 먼저 실행되는 특징을 호이스팅(hoisting)이라 한다.




2. Let 재선언X 재할당 가능

Let LJH = '사람' // 변수 선언,  할당



LJH = '동물'// 재할당



Let LJH = '사람'// Error 재선언 불가

사람->동물로 재선언은 가능하지만 let이라는 키워드를 통해 LJH를 재선언하는것은 불가능하다.

또한 아래와 같은 Scope을 가진다.

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

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

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

모든 코드 블록(함수, if 문, for 문, while 문, try/catch 문 등) 내에서 선언된 변수는 코드 블록 내에서만 유효하며 코드 블록 외부에서는 참조할 수 없다. 즉, 코드 블록 내부에서 선언한 변수는 지역 변수이다.



3. Const 재선언X 재할당X

Const LJH = '사람' // 변수 선언,  할당



LJH = '동물' //Error



Const LJH = '사람' // Error

재선언, 재할당이 불가하므로 항상 선언과 동시에 값을 할당을 해주어야한다.

Const 또한 Let과 같은 Scope를 갖고 있으며 Const변수의 타입이 객체인 경우 재할당은 불가능하지만 할당된 객체의 내용은 변경할 수 있다.

(프로퍼티의 추가,삭제,값의변경)

업데이트: