본문 바로가기
L'etude

var, let, const 차이

by hxunz 2022. 3. 20.

요즘 자바스크립트 강의를 듣고 있는데 예시 코드를 작성할때마다 어떤때에는 var를 쓰고 어떤때에는 let 혹은 const를 사용하길래

그 차이점이 무엇인지 궁금해서 찾아보았다.

 

작년에 코드숨에서 리액트 강의를 들을때 제일 처음으로 했던 것이 let을 제거해보는 과제였는데,,,

코드숨 강의도 다시 한번 찾아봐야겠다.

 

변수 선언으로 var가 제일 오래전부터 있었고 let, const는 ES6에서 추가 되었다.

 

var 

 - 변수를 선언하고(선언 단계와 초기화 단계가 동시에 진행된다), 선택적으로 초기화할 수 있다.

 - 문제점 

  1. 선언된 변수들은 변수가 선언된 실행 콘텍스트(execution context) 안에서 만들어집니다. 선언되지 않은 변수들은 항상 전역변수 입니다. 함수 외부에서 선언한 변수도 모두 전역 변수다. (함수 레벨 스코프 때문에)
    함수레벨스코프 : var 키워드로 선언된 변수는 오로지 함수의 코드 블록만을 지역 스코프로 인정
    스코프(scope) : 식별자의 유효범위를 뜻하며, 선언된 위치에 따라 유효 범위가 달라진다.
  2. 선언된 변수들은 어떠한 코드가 실행되기 전에 만들어집니다. 선언되지 않은 변수들은 변수들을 할당하는 코드가 실행되기 전까지는 존재하지 않습니다. 
    변수 선언문 이전에 변수를 참조하면 언제나 undefined를 반환
  3. 선언된 변수들은 변수들의 실행 콘텍스트(execution context)의 프로퍼티를 변경되지 않습니다. 선언되지 않은 변수들은 변경 가능합니다. (e.g 삭제 될 수도 있습니다.)

 - 변수 선언 오류는 예기치 못한 값을 반환할 수 있다.

 

let

 - 블록 스코프의 범위를 가지는 지역 변수를 선언하며, 선언과 동시에 임의의 값으로 초기화할 수도 있습니다.

 - 코드 블록(ex. 함수, if, for, while, try/catch 문 등)을 지역 스코프로 인정하는 블록 레벨 스코프를 따른다.

    블록 레벨 스코프 : 자바스크립트에서 모든 코드 블록(if, for, while, try/catch 등)이 지역 스코프를 만드는것

 - 선언 단계와 초기화 단계가 분리되어 진행

 

const

 - const가 let과 다른 점이 있다면, 반드시 선언과 초기화를 동시에 진행되어야 한다.

 - 블록 범위의 상수를 선언합니다. 상수의 값은 재할당할 수 없으며 다시 선언할 수도 없습니다.

 - 코드 블록(ex. 함수, if, for, while, try/catch 문 등)을 지역 스코프로 인정하는 블록 레벨 스코프를 따른다.

 - 선언 단계와 초기화 단계가 동시에 진행

 

엄격한 코드 작성을 위해서는 const 사용하는게 젤 나은듯..?

mdn 문서랑 잘 정리되어있는 블로그 보면서 차이점에 대해서 공부해봤는데 얼추 이해가 되는듯하고 잼난ㄷㅏ..

그리고 이 기본적인것들도 잘 몰랐던거에 대해서 반성하게 되고 앞으로 더 공부해봐야겠다~~~!

댓글