반응형
var & let
- var는 한번 선언된 변수를 다시 선언할 수 있다.
let name = 'hanseul';
console.log(name);
let name = 'duseul'
console.log(name);
//에러
- var는 선언하기 전에 사용할 수 있다.
console.log(name); // undefined
var name = 'hanseul';
왜 에러가 일어나지 않는가 ?
var name; //선언부
console.log(name); // undefined
name = 'hanseul'; //할당부
왜냐하면 var는 이렇게 동작하기 때문이다. 이를 호이스팅이라고 한다.
(호이스팅 : 스코프내부 어디서든 변수 선언은 최상위에 선언된 것처럼 행동)
반응형
그렇다면 왜 undefined를 반환할까?
선언은 호이스팅이 되지만 할당은 호이스팅되지 않기 때문이다.
즉, 'name'이라는 변수만 올라간 것이고 'hanseul'이라는 값은 올라가지 않는 것이다.
위와 같은 상황에서 let은 에러를 반환한다.
console.log(name); // 에러
let name = 'hanseul';
그렇다면 왜 var처럼 동작하지 않고 에러를 반환하는 걸까?
TDZ, Temporal Dead Zone
- TDZ영역에 있는 변수들은 사용할 수 없다.
- let과 const는 이 TDZ의 영향을 받는다.
- 할당을 하기 전에는 사용할 수 없다.
스코프
var: 함수 스코프 (함수 내에서 선언되면 함수 밖을 나갈 수 없음)
let, const: 블록 스코프 (중괄호{} 내에서만 사용가능)
반응형
'JavaScript' 카테고리의 다른 글
[ES6 문법] 전개 연산자, 기본/참조형 데이터 타입 (0) | 2023.08.13 |
---|---|
[ES6 문법] 구조 분해 할당(Destructuring assignment) (0) | 2023.08.12 |
[ES6 문법] 화살표 함수(Arrow Function) (0) | 2023.08.11 |
[JavaScript] 클로저 | 정의, 동작원리, 데이터은닉, 비동기작업 (0) | 2023.06.29 |
[JavaScript] this | 전역, 함수호출, 객체, 생성자함수, 이벤트핸들러 (0) | 2023.06.28 |