var 키워드의 문제점
1. 변수 중복선언으로 의도치않은 부작용
2. var키워드로 선언한 변수는 함수의 코드블록만 지역스코프로 인정
3. 변수 호이스팅으로 의도치않게 undefined를 반환하는 경우
let키워드 !
특징
1. 변수 중복 선언 금지
2. let 키워드로 선언한 변수는 모든 코드블록을 지역스코프로 인정하는 블록레벨스코프!
변수 호이스팅
console.log(foo); // ReferenceError
let foo;
-> 호이스팅이 안돼서 참조에러가 발생함.
var는 선언단계와 초기화단계가 한번에 진행돼서 undefined로 초기화해주는데
let은 선언단계랑 초기화단계가 분리되어서 진행됨
'
그 분리되는 구간을 일시적 사각지대 라고 부름
-> let 키워드는 변수호이스팅을 하지않는다??
NO
let foo = 1; // 전역변수
{
console.log(foo); // ReferenceError
let foo = 2; // 지역변수
}
let키워드도 참조에러가 발생함
JS에서 let , const를 포함한 모든선언이 호이스팅을 함.
근데 ES6에서는 let, const, class를 사용한 선언문은 호이스팅이 발생하지 않는것처럼 동작함
const 키워드 !
특징
1. const는 선언과 동시에 초기화 해야함ㅋ
const foo = 0;
2. const로 선언한 변수는 재할당 금지
3. 상수임을 나타내기위해 언더스코어(_)로 구분하는게 일반적
const TAX_RATE = 0.1;
4. const 키워드로 선언된 변수에 객체를 할당하면 값을 변경할수있다.
const person = {
name: 'Lee'
};
// 객체는 변경 가능한 값이다. 따라서 재할당 없이 변경가능
person.name = 'kim';
console.log(person); // {name: "Kim"}
🐌 변수 선언시 기본적으로 const를 사용, 재할당이 필요한 경우에만 let 사용하기.
let키워드를 사용할때 변수 스코프는 최대한 좁게
읽기전용으로 사용하는 원시값과 객체에는 const 키워드 사용하기
'JavaScript' 카테고리의 다른 글
this함수 (0) | 2022.05.17 |
---|---|
[16장] 프로퍼티 어트리뷰트 (0) | 2022.03.08 |
[13장, 14장] 스코프 , 전역변수의 문제점 (0) | 2022.02.25 |
[12장] 함수 (2) | 2022.02.24 |
[10장] 객체 리터럴 (0) | 2022.02.17 |