let
let은 이름이 같은 변수를 중복선언하면 문법에러가 발생한다. (변수 중복 선언 금지)
let은 블록레벨 스코프를 따른다.
let foo = 1; // 전역 변수
{
let foo = 2; // 지역 변수
let bar = 3; // 지역 변수
}
console.log(foo); // 1
console.log(bar); // ReferenceError: bar is not defined
변수 호이스팅
let 키워드로 선언한 변수는 선언단계와 초기화 단계가 분리되어 진행된다. (var는 같이진행된다)
만약 초기화 단계가 실행되기 이전에 변수에 접근하려하면 참조에러( ReferenceError)가 발생한다.
let으로 선언한 변수는 스코프의 시작지점부터 초기화 단계 시작 지점까지 변수를 참조할수없다.
스코프시작 지점부터 초기화 시작지점까지의 변수를 참조할수없는 구간을 일시적 사작지대 (TDZ - Temporal Dead Zone) 이라한다.
let foo = 1; // 전역 변수
{
let foo = 2; // 지역 변수
let bar = 3; // 지역 변수
}
console.log(foo); // 1
console.log(bar); // ReferenceError: bar is not defined
let 또한 호이스팅이 호이스팅이 발생하지 않는것처럼 동작한다. (발생한다는소리 참조에러.. )
const
const 는 반드시 선언과 동시에 초기화 해야한다.
const 또한 블록레벨 스코프를 가지며 호이스팅이 발생하지 않는것처럼 동작한다.
const 는 let과 달리 재할당이 금지된다.
const는 상수이며 상수는 재할당이 금지된 변수를 말한다.
유지보수의 편의를 위해 적극사용하자.
const 로선언된 뷴수에 원시값을 할당한 경우 값을 변경할수없다. 하지만 const 로 선언된 변수에 객체를 할당한경우 변경할수있다.
const는 재할당을 금지할뿐 불변을 의미하지는 않는다.
'JavaScript > 모던자바스크립트 딥다이브' 카테고리의 다른 글
[딥다이브] 17장 생성자 함수에 의한 객체생성 (0) | 2022.03.09 |
---|---|
[딥다이브] 16장 프로퍼티 어트리뷰트 (0) | 2022.03.09 |
[딥다이브] 14장 전역변수의 문제점 (0) | 2022.02.21 |
[딥다이브] 13장 스코프 (0) | 2022.02.14 |
[딥다이브] 12장 함수 (0) | 2022.02.14 |