쉽게 생각하면, 어떤 값을 담기 위한 상자나 그릇이라고 비유할 수 있다.
var
var name = "고요한";
var name = "한요고";
- 함수 스코프
- 변수 선언부가 호이스팅 된다. (값에는 적용되지 않는다.)
- 같은 이름의 변수를 여러번 선언 가능하다.
var
는 메모리에 지정한 값의 주소를 끌어오기 때문에 중첩하여 작성하여도 오류가 발생하지 않는다.
순서에 상관없이 위쪽으로 끌어 올린다.
호이스팅 : 우선순위가 높아지는 것
let
let name = "고요한";
let name = "한요고";
→ 불가능 why? 변수의 이름이 같을 수 없다.
let name2 = "한요고";
→ 가능
- 블럭 스코프
- 같은 이름의 변수를 선언할 수 없다.
- 재할당 가능하다.
상수란 변하지 않는 값이다.
const
const name= "상수";
선언시 반드시 같이 할당 해야한다.
const name;
값을 할당하지 않으면 Error가 뜬다.
→ Uncaught SyntaxError: Missing initializer in const declaration
가 나타나게 된다.
- 블럭 스코프
- 선언과 동시에 할당해야한다.
- 재할당이 불가능하다 (할당한 값을 변경할 수 없다)
let
과 const
비교let
let userName = "abc"
userName = "aaa"
→ let
은 처음에 입력한 값을 바꿀 수 있다
const
const userName2 = "bbb"
→ const
는 처음에 입력한 값을 바꿀 수 없다.
userName2 = "aaa"
→ 에러가 발생한다.