일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 희망
- 좋은글
- python Django
- 파이썬 장고
- Kotlin 클래스 속성정의
- activate 오류
- 강제 타입변환
- NextJs
- Python
- git
- 장고 가상환경
- 넥스트js
- Variable declaration
- 도전
- Kotlin Class
- 다중조건문
- Kotlin else if
- Kotlin 클래스
- Python Class
- django virtualenv
- 파이썬
- Kotlin 조건문
- 클래스 속성
- 파이썬 제어문
- 성공
- 파이썬 반복문
- 파이썬 클래스
- Kotlin If
- github
- 자바 기본타입
- Today
- Total
키모스토리
#1 변수, 호이스팅, TDZ(Temporal Dead Zone) 본문
var, let, const의 차이점
- 중복 선언과 재할당
- 스코프 범위
- 호이스팅
중복 선언과 재할당
var
var a = 5;
console.log(a); // 5
var a = 10;
console.log(a); // 10
a = 15;
console.log(a); // 15
var 에서는 중복 선언과 재할당이 모두 가능하다.
마지막에 할당된 값이 최종으로 변수의 값으로 저장된다.
let
let a = 5;
let a = 10;
cnosole.log(a); // SyntaxError: Identifier 'a' has already been declared
let 에서는 중복 선언을 허용하지 않는다.
중복 선언을 할 경우 SyntaxError 가 발생하게 된다.
let a = 5;
console.log(a); // 5
a = 10;
console.log(a); // 10
재할당은 var 와 동일하게 가능하다.
const
const a = 5;
const a = 10;
cnosole.log(a); // SyntaxError: Identifier 'a' has already been declared
const 에서도 let 과 동일하게 중복 선언을 허용하지 않는다.
const a = 5;
console.log(a); // 5
a = 10;
console.log(a); // TypeError: Assignment to constant variable.
하지만 const 는 다른 변수들과 다르게 재할당도 불가능하다.
이유는 const 는 상수를 선언하는 키워드이기 때문이다.
처음 선언과 초기화를 하고 나면 다른 값을 재할당 할 수 없어진다.
스코프 범위
var
var 는 함수 단위 스코프(function-level scope)이다.
function hello(){
var a = 10;
console.log(a);
}
hello(); // 10
console.log(a); //ReferenceError: a is not defined
var 변수가 선언된 함수 내부의 어디서든 참조가 가능하지만, 외부로는 참조가 불가능하다.
또한 함수 내부에서 선언된 var 는 지역변수로 간주하지만, 함수 외부에서 var 가 선언 되었다면 전역변수로 간주한다.
let, const
let 과 const 는 블록 단위 스코프(block-level scope)이다.
function hello() {
let a = 5;
console.log(a); // 5
}
console.log(a); // ReferenceError: a is not defined
{ } 블록 내부에서 선언된 let , const 변수는 외부에서 참조되지 않는다.
호이스팅
var
var 는 호이스팅이 발생한다.
console.log(a); // undefined :: 변수 선언 이전에 변수 참조 가능
var a // 초기화
console.log(a); // undefined
a = 10 // 할당
console.log(a); // 10
뒤에 선언된 변수 a 가 앞에 참조되었음에도 에러가 아닌 uedefined 가 호출된다.
let, const
let , const 는 호이스팅이 발생하지만, 다르게 작동한다.
console.log(a); // ReferenceError :: 변수 선언 이전에 변수 참조 불가능
let a // 초기화
console.log(a); // undefined
a = 10 // 할당
consloe.log(a); // 10
var 와는 다르게 뒤에 선언된 변수를 앞에서 참조하려 하니 에러가 발생한다.
호이스팅이 발생하지 않는 것처럼 보일 수 있는데, 이런 현상은 let , const 의 호이스팅 과정이 var 와는 다르게 진행되기 때문이다.
let , const 로 변수를 선언하는 경우에는, 변수의 선언과 초기화 사이에 일시적으로 변수 값을 참조할 수 없는 구간인 TDZ(Temporal Dead Zone) 가 존재하기 때문에 벌어지는 현상이다.
호이스팅은 발생하지만, 값을 참조할 수 없기 때문에 동작하지 않는 것처럼 보인다.
'Web Devlopment > JavaScript' 카테고리의 다른 글
#5 숫자, 수학 method (0) | 2025.03.13 |
---|---|
#4 Symbol - property key (0) | 2025.03.13 |
#3 객체 메소드, 계산된 프로퍼티 (0) | 2025.03.13 |
#2 생성자 함수 (0) | 2025.03.13 |
자바스크립트 들어가기 (0) | 2022.12.29 |