TIL 39 | JS - var, let, const

Yonghyun·2021년 12월 7일
0

JavaScript & React

목록 보기
21/31
post-thumbnail

var, let, const의 차이점

  1. var는 function-scoped이고 let, const는 block-scoped이다.
  2. var로 선언한 변수는 선언하기 전에 사용해도 에러가 나지 않지만 let, const는 에러가 발생한다.
  3. var는 이미 선언되어 있는 이름과 같은 이름으로 변수를 또 선언해도 에러가 나지 않지만 let, const는 이미 존재하는 변수와 같은 이름의 변수를 선언하면 에러가 난다.
  4. var, let은 변수 선언시 초기 값을 주지 않아도 되지만 const는 반드시 초기값을 할당해야 한다.
  5. var, let은 값을 재할당할 수 있지만 const는 한번 할당한 값을 변경할 수 없다.(but, 객체안에 프로퍼티는 변경할 수 있다.)

var

변수 선언을 여러 번해도 에러 없이 각기 다른 값을 출력할 수 있다.
이러한 점은 필요할 때마다 변수를 사용할 수 있기때문에 편리하다는 장점이 있지만 같은 이름의 변수명을 남용하는 문제가 발생할 수도 있기 때문에 장점보다 단점이 더 크다고 할 수 있다.
이러한 단점을 보완하기 위해 ES6부터 let, const가 추가되었다.

let

let은 변수의 재할당은 가능하지만 var처럼 재선언은 되지 않는다.

const

const의 경우 constant(상수)의 의미 그대로 한 번만 선언이 가능하고 한번 선언된 값은 재할당을 통해 바꿀 수 없다.

호이스팅

호이스팅이란 함수 안에 있는 선언을 끌어올려서 해당 함수 유효 범위의 최상단에 선언하는 것을 의미한다. var로 선언한 변수의 경우 호이스팅이 발생해 최상위로 변수 선언이 옮겨졌지만 let의 경우에는 호이스팅이 발생하지 않는다.
때문에 var로 코드를 작성하는 경우에는 호이스팅이 발생해서 같은 이름의 변수나 함수로 값이 변질될 수 있다. 호이스팅이 자주 일어나는 코드의 경우 유지보수가 어려워지며, 쓸모없는 코드가 생길 수 있다.

스코프

스코프는 범위라는 뜻을 갖고 있다. 즉 변수에 접근할 수 있는 범위를 의미하며, 전역 스코프(global scope)와 지역 스코프(local scope)가 있다.

전역 스코프(Global Scope)

브라우저를 기준으로 변수가 함수 바깥이나 중괄호 바깥에 선언되었다면 전역 스코프에 정의된다고 볼 수 있다. 전역 스코프에 정의된 변수를 전역 변수라고 한다. 전역 변수를 선언하면 코드 모든 곳에서 해당 변수를 사용할 수 있다.

지역 스코프(Local Scope)

전역 스코프와는 다르게 특정 부분에서만 사용 가능한 변수는 지역 스코프 내에 포함되어 있다고 할 수 있고 이런 변수를 지역 변수라 칭한다. 자바스크립트에는 함수 스코프와 블록 스코프 두 개의 지역 스코프가 존재한다. 여기서 말하는 블록은 {...}을 의미하며, 이 블록을 벗어난다면 블록 내부에 선언된 변수를 참조할 수 없다.

함수 스코프(Function scope)

선언된 함수의 내부 어느 곳에서라도 접근이 가능하다.

블록 스코프(Block Scope)

블록 스코프는 블록 내부에서 선언한 변수는 블록 외부에서 사용할 수 없다.

profile
Life is all about timing.

0개의 댓글