[JS] - var, let, const

🍉effy·2022년 4월 11일
0
post-thumbnail
  • ES5 까지는 var 로 변수 선언이 가능했지만, var 의 여러 문제, 한계점으로 인해 ES6 부터는 constlet 이 나오게 되었다.
  • 변수의 재선언과 호이스팅을 방지하기 위해


변수(variable) 란?

  • 어떤 하나의 값을 저장하기 위해 확보한 메모리 공간 자체. 그 메모리 공간을 식별하기 위해 붙여지는 이름이다.
  • 자바스크립트에서 개발자가 변수를 통해 값에 접근할 수 있다.
  • 변수는 변수의 값이 아니라, 참조하는 메모리 주소를 기억하고 있고, 변수를 사용하게 될 경우엔 자바스크립트 엔진이 변수와 메모리 주소를 통해 저장된 값을 반환한다.


변수의 선언 3단계

1️⃣ 선언 - 변수를 선언
2️⃣ 초기화 - 변수를 선언하면 자바스크립트는 해당 변수를 인식하여 그 변수에 값을 저장할 수 있도록 메모리 공간을 만들게 된다. 초기값으로 undefined 값을 할당하여 초기화한다.
3️⃣ 할당 - 변수에 값을 저장



var

1️⃣ 재선언 및 재할당이 가능

  • 같은 이름의 변수명을 여러번 쓰게되면 추후에 디버깅 측면에서 어려움이 있다.
    (이 문제점으로 ES6 에 let, const 가 추가 된다.)

2️⃣ 함수 레벨 스코프



let

1️⃣ 재선언 불가능 / 재할당 가능
2️⃣ 블록 레벨 스코프



const

1️⃣ 재선언 및 재할당 불가능
2️⃣ 선언 시 초기화와 값 할당을 해주어야 한다.
3️⃣ 블록 레벨 스코프



let 과 const 의 차이점?

  • immutable 여부. let 은 재할당이 가능하지만, const 는 재할당이 불가능하다는 점


호이스팅에서의 차이


  • var 를 사용했을 경우, 선언 + 초기화가 동시에 이루어진다. 그래서 변수 선언 이전에 해당 변수를 참조할 경우에 undefined 가 출력된다. (초기화한 상태로 메모리에 저장되기 때문에)
  • letconst 을 사용했을 경우, 변수 선언 시에 초기화를 하지 않는다. 그래서 변수 선언 이전에 해당 변수를 참조할 경우에 ReferenceError 가 발생하게 된다. (초기화되지 않은 상태로 메모리에 저장되기 때문에)
    👉🏻 letconst선언된 변수는 스코프 시작에서 변수의 선언(초기화 시작 전) 까지 일시적 사각지대(TDZ) 빠지기 때문이다.
    📌 초기화 하지 않으면, 변수를 참조할 수 없다!
profile
Je vais l'essayer

0개의 댓글