var vs let vs const

zne·2021년 6월 26일

var vs let vs const

  1. var는 함수 스코프를 갖지만 let, const는 블록 스코프를 갖는다.
  2. var, let은 초기값 없이 선언이 가능하지만 const는 선언 시 초기값이 필요하다.
  3. var, let은 할당한 변수 값을 재할당 할 수 있지만 const는 한번 할당하면 다른 값을 대입할 수 없다.(const로 선언된 객체 내의 프로퍼티는 변경 가능)

스코프란?

스코프(scope)는 '변수에 접근할 수 있는 범위'를 말한다.
스코프의 종류에는 전역 스코프(global scope)지역 스코프(local scope)가 있는데 전역 스코프는 전역에서 선언되어 어디서든 접근이 가능하지만 지역 스코프는 해당 지역 내에서만 접근 할 수 있다.

지역 스코프의 예로는 함수 레벨 스코프와 블록 레벨 스코프가 있다. 자바스크립트에서는 함수를 선언할 때마다 새로운 스코프가 생성이되는데, 이 때 함수 내에서 선언한 변수는 함수 안에서만 접근이 가능한 것이 함수 레벨 스코프의 의미이다. 반면 블록 레벨 스코프는 if문, for문 등에서 사용하는 중괄호에 속하는 범위를 말한다.

아래 예시를 보자.

function run() {
  var a = "A";
  let b = "B";

  console.log(a, b);// A B

  {
    var c = "C";
    let d = "D";
    console.log(d);// D
  }
  console.log(c);// C
  console.log(d);// d is not defined
}

var는 함수레벨 스코프이므로 run함수 내에서는 변수 a와 c에 모두 접근이 가능하다. 하지만 let으로 선언된 변수를 보면 b는 함수 안 최상위에서 선언되어 접근이 가능하지만 중괄호 안에서 선언된 d는 중괄호 범위를 벗어난 곳에서는 레퍼런스 에러가 나는것을 볼 수 있다.

var의 경우 문법이 까다롭지 않기 때문에 버그 발생, 메모리 누수의 위험이 있다. 따라서 let과 const를 사용하는 것이 좋다.

0개의 댓글