polyfill
Babel
1. 선언 단계 : 변수를 변수 객체에 등록한다.
2. 초기화 단계 : 변수를 메모리에 할당하고, undefined로 초기화한다.
3. 할당 단계 : undefined로 초기화된 변수에 실제로 값을 할당한다.
var 키워드
코드 평가단계 : 선언과 동시에 초기화 진행
코드 실행단계 : 값 할당 진행
코드평가에서는
var 키워드 : 호이스팅 Hoisting
즉, 쉽게 말해. console.log(a)를 먼저 쓰고
밑에서 var a = 1을 해도 선언과 초기화 단계가 이뤄어져서 undefined값이 나오게 됨.
var 키워드 단점
키워드의 생략 가능 (var a =1; 안하고 그냥 a =1; 하면 앞에 var가 붙은걸로 이해함.
중복 선언 가능
변수 호이스팅
const는
console.log(a);
const a = 1;
이렇게 하면 레퍼런스 오류가 뜸.
const로 변수를 지정하면 선언까지만 하고,
실행이 될때, 초기화와 할당을 해주는 방식임.
정리해서 보면
console.log(a);
try {
console.log(b);
console.log(c);
} catch{};
var a = 1;
const b = 2;
let c;
a는 평가단계에서 초기화가 되기때문에 초반에 undefined로 정의가 되고 할당문을 거쳐서 최종적으로 a에 1이 할당이 되었고,
b 경우 코드 평가 단계에서 코드 초기화가 진행되지 않았기 때문에 선언 전에 참조를 할 경우 레퍼런스 오류를 뱉는다.
그리고 b 선언문에 와서 b에 할당을 해주니 2라는 값이 할당된 것을 알 수 있었습니다.
c에 경우는 할당문이 없기 때문에 초기화가 해서 undefined가 나옴.
Reference Type
객체 타입 - mutable
변경 가능한 값(mutable) : 객체의 속성을 변경, 추가, 삭제 가능
힙 메모리에 저장
일급객체란, 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다.