카테고리 없음

[Javascript] let / const / var / 중복 선언 / 호이스팅 / 스코프 정리!

깅강이 2024. 1. 21. 02:14

var, const, var의 중복 선언 허용 여부

  • var: 동일한 스코프 내에서 여러 번 선언. 중복 선언이 허용되므로, 실수로 변수를 재선언하는 경우가 발생할 수 있다. 요즘은 거의 사용하지 않는다. 
  • let: 동일한 스코프 내에서 중복 선언이 불가능하다. 이미 선언된 변수명을 다시 선언하려고 하면 에러가 발생한다. 한번 할당한 값을 변경할 수 있다.
  • const: let과 마찬가지로 동일한 스코프 내에서 중복 선언이 불가능하다. 또한 선언과 동시에 초기화해야 하며, 한 번 할당된 값은 변경할 수 없다.

 

스코프

  • var: 함수 스코프(function scope)를 가진다. 즉, var로 선언된 변수는 선언된 함수 내에서만 유효하며, 함수 외부에서는 접근할 수 없다.
  • let과 const: 블록 스코프(block scope)를 가진다. 즉, 이들로 선언된 변수는 선언된 블록(중괄호 {}로 둘러싸인 구역) 내에서만 유효하며, 블록 외부에서는 접근할 수 없다.

 

호이스팅

호이스팅이란

호이스팅(Hoisting)은 JavaScript에서 변수와 함수 선언이 그들이 포함된 스코프의 최상단으로 끌어올려지는 것처럼 작동하는 특성. 이는 JavaScript 엔진이 스크립트를 실행하기 전에 변수와 함수 선언을 먼저 읽고 메모리에 저장하는 방식 때문에 발생한다.

 

  • var: 호이스팅이 발생. var로 선언된 변수는 코드가 실행되기 전에 스코프의 최상단으로 끌어올려지는 것처럼 작동. 그러나 초기화는 호이스팅 되지 않는다. (ex : var a = 10;)
  • let과 const: 호이스팅은 발생하지만, 변수가 선언된 라인 이전에서 접근하려고 하면 참조 에러(Reference Error)가 발생한다. 이는 일시적 사각 지대(Temporal Dead Zone, TDZ) 때문. let과 const로 선언된 변수는 선언 이전에 접근할 수 없다.