[기술면접/JS] var, let, const

강민혁·2023년 2월 8일
0

기술면접 | JS

목록 보기
1/17

var, let, const의 차이에 대해 설명하세요

Keyword

같은 이름 변수, 재할당, immutable, scope, function-level, block-level, 호이스팅, 선언, 초기화, undefined


Script

먼저 let과 const는 JS ES6에서 var의 단점을 보완하기 위해 추가된 변수 선언 방식입니다.

var 같은 경우, 같은 이름의 변수를 여러번 선언할 수 있어 코드량이 많아질 경우 기존 변수의 존재를 잊고 값을 재할당하게 되는 일이 발생할 수 있다는 단점이 있습니다. 반면 let과 const는 같은 이름의 변수를 여러번 선언할 수 없고, let은 재할당이 가능하지만 const는 재할당이 불가능하다는 차이, 즉 immutable 여부의 차이가 존재합니다.

그리고 scope 측면에서도 차이를 가지는데, var 같은 경우는 함수 레벨 scope(Function-level scope), let과 const는 블록 레벨 scope(Block-level scope)를 가집니다. 함수 레벨 scope는 기본적으로 함수내에서 선언된 모든 변수에 대해서 지역 변수로 취급하며 이로 인해 의도치 않게 전역 변수를 만들 수 있습니다. 블록 레벨 scope는 블록 내부에서 선언된 변수는 해당 블록 내부에서만 유효하고 블록 외부에서는 참조할 수 없습니다.

호이스팅 관점에서도 차이를 보이는데, var 같은 경우는 만약 어떤 변수가 선언되기 전에 참조되더라도 오류가 발생하지 않습니다. 그 이유는 호이스팅 과정에서 해당 변수를 미리 선언하고 undefined초기화해놓기 때문입니다. 하지만 let과 const 같은 경우 동일한 상황에서 오류가 발생하는데, 이는 변수 선언만 이루어지고 초기화 과정은 실제 변수 선언문을 만났을 때 수행하기 때문입니다. 호이스팅은 발생하지만 값을 참조할 수 없기 때문에 오류가 발생합니다.


Additional

Reference

BOOK - modern javascript deep dive

profile
with programming

0개의 댓글