Javascript의 var / let / const 의 스코프와 재할당 가능 여부
Language/Javascript2024. 3. 7. 00:57자바스크립트(Javascript)에서 변수를 선언하는 키워드에는 var
, let
, const
가 있습니다.
각각의 키워드는 모두 변수를 선언하는 것은 동일하지만, 스코프(scope
), 호이스팅(hoisting
), 재할당 가능 여부의 차이를 가지고 있습니다. 본 글에서는 이 세 가지 변수 선언을 위한 키워드의 차이점을 소개합니다.
스코프(Scope)
스코프는 변수가 코드 내에서 접근 가능한 범위를 의미합니다. var, let, const는 각각 아래와 같은 스코프를 가집니다.
- var: 함수 레벨 스코프(
function-level scope
) - let: 블록 레벨 스코프(
block-level scope
) - const: 블록 레벨 스코프(
block-level scope
)
블록 레벨 스코프(block-level scope)를 가진다는 것은, 변수가 선언된 {}(중괄호) 내에서만 접근 가능하다는 의미
if (true) {
var varVariable = "전체 함수에서 접근 가능";
let letVariable = "해당 블록 내에서만 접근 가능";
}
console.log(varVariable); // "전체 함수에서 접근 가능"
console.log(letVariable); // Uncaught ReferenceError: letVariable is not defined
호이스팅(Hoisting)
호이스팅은 자바스크립트의 특성중 하나로, var
로 선언된 변수의 선언부가 가장 상단으로 올려지는것을 말합니다. var
로 선언된 변수는 선언부가 가장 상단으로 올려지지만, 할당은 끌어올려지지 않습니다.
반면, let
과 const
는 호이스팅이 되지만, TDZ(Temporal Dead Zone
)로 인해 선언 전에 접근하려 하면 오류가 발생합니다.
console.log(varVariable); // undefined
var varVariable = "호이스팅 되었음";
console.log(letVariable); // Uncaught ReferenceError: letVariable is not defined
let letVariable = "호이스팅은 되었지만, TDZ 때문에 에러 발생";
재할당과 재선언
var, let, const는 각각 아래와 같은 특성을 같습니다.
var
: 같은 스코프 내에서 재선언과 재할당이 가능let
: 재할당은 가능하지만, 재선언은 불가능const
: 재선언과 재할당 모두 불가능
var varVariable = "처음 선언";
varVariable = "재할당 가능";
var varVariable = "재선언 가능";
let letVariable = "처음 선언";
letVariable = "재할당 가능";
let letVariable = "재선언 불가능"; // Uncaught SyntaxError: Identifier 'letVariable' has already been declared
const constVariable = "상수 선언";
constVariable = "재할당 불가능"; // Uncaught TypeError: Assignment to constant variable.
결론
var, let, const 주요 차이점을 이해하는 것은 변수의 접근성, 보안, 그리고 코드의 예측 가능성을 향상시키는 데 중요합니다. var는 가능한 한 피하는 것이 좋으며, 대부분의 경우 let과 const의 사용하는 것이 좋습니다.
관련 글
'Language > Javascript' 카테고리의 다른 글
Javascript에서 진정한 난수(랜덤한 수)를 생성하는 방법 (0) | 2024.02.28 |
---|---|
Javascript에서 random() 함수를 사용하여 랜덤한 값 생성하기 (0) | 2024.02.28 |
JavaScript ES6에서 추가된 map(), filter(), reduce() 이해하기 (0) | 2024.02.28 |
Javascript 배열의 every(), some() 함수 (0) | 2024.02.02 |
Object.assign()과 스프레드(spread) 연산자와의 차이점 (1) | 2023.10.17 |
IT 기술에 대한 글을 주로 작성하고, 일상 내용, 맛집/숙박/제품 리뷰 등 여러가지 주제를작성하는 블로그입니다. 티스토리 커스텀 스킨도 개발하고 있으니 관심있으신분은 Berry Skin을 검색바랍니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!