실전 리액트 프로그래밍을 읽고 개인적으로 정리한 내용입니다.
ES5까지 JS에서는 var를 이용하여 변수를 정의하는 것이 유일한 방법이었다. ES6에서는 let과 const를 이용하는 새로운 변수 선언 방식이 생겼는데, 이 이유에 대해서 알아본다.
var가 가진 문제scope: 변수가 사용될 수 있는 영역. 변수가 정의된 위치에 의해 결정됨
var로 정의된 변수는 함수 스코프이기 때문에 여러 문제가 발생한다.
var를 함수 밖에서 사용하면 참조 에러가 발생한다.for 반복문에서 정의된 변수가 for문 밖에서도 쓰인다.while, switch, if 등에서도 같은 문제를 갖고 있다.var로 정의된 변수는 그 변수가 속한 스코프의 최상단으로 끌어올려진다. = 호이스팅
console.log(myVar);
var myVar = 1;
undefined가 출력된다.var myVar = undefined;
console.log(myVar);
var myVar = 1;변수 재정의가 가능하다. 상수처럼 쓸 값도 무조건 재할당 가능한 변수로 만들어야 한다.
var myVar = 1;
var myVar = 2;
var는 함수스코프였지만, const와 let은 블록스코프이다. 대부분의 언어에서 블록스코프를 사용하므로 익숙한 개념이다.
let foo = "bar1";
console.log(foo); //bar1
if (true) {
let foo = "bar2";
console.log(foo); //bar2
}
console.log(foo); //bar1
변수가 정의된 시점보다 먼저 변수를 사용할 수 없다.
console.log(foo); // 참조 에러 발생
const foo = 1;
TDZ)라고 한다.TDZ에 대한 자세한 정보는 JS 책에서 추후 공부 필요!const로 정의된 변수에 값을 재할당하면 에러가 발생한다. 다만 const로 정의된 객체의 내부 속성값은 수정 가능하다는 점을 주의해야 한다.
const bar = { prop1: "a" };
bar.prop1 = "b";
bar.prop2 = 123;
console.log(bar); // {prop1: 'b', prop2: 123}
const arr = [10, 20];
arr[0] = 100;
arr.push(300);
console.log(arr); //[100, 200, 300]
글 잘 봤습니다.