호이스팅(hoisting)이란?
- 어디에 선언했는지에 상관 없이 제일 위로 선언을 끌어 올려주는 것
: var hoisting (move declaration from bottom to top)
age = 4;
var age; // 오류 없이 동작함 (var hoisting으로 file 제일 위에 선언이 올라가게 됨)
age=4;
let age; // 선언하기 전에 할당하여 오류 동작
- 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것
- 스코프, 호이스팅, TDZ
- 함수 선언문과 함수 표현식에서 호이스팅 방식의 차이
- 여러분이 많이 작성해온 let, const, var, function 이 어떤 원리로 실행되는지 알 수 있어요.
- 실행 컨텍스트와 콜 스택
- 스코프 체인, 변수 은닉화
var를 쓰면 안되는 이유 (이젠 let으로!)
1. var hoisting
- 선언을 하지 않고 값을 할당해도 오류 없이 동작함
- var hoisting으로 file 제일 위에 선언이 올라갔기 때문
2. block scope이 없음
- block scope 내에 선언을 해도, 이 scope을 무시하고 global 하게 사용됨
▶ ES6부터는 let을 사용하도록 권고하고 있음
let은 mutable data type으로
Constants
- 상수라는 뜻으로, 한번 선언/할당하면 값을 바꿀 수 없음
- immutable data type : 변경이 불가능함
※ immutable data type을 사용하면 좋은 이유
① security
② thread safety
③ reduce human mistakes
정리하면, 변수 data type은 2가지
1. mutable type : let
2. immutable type : const
Variable type
자바스크립트의 데이터타입은 크게 2가지(+1)로 구분된다.
- primitive type : 더이상 나눠질 수 없는 single item
ex) number, string, boolean, null, undefined, symbol
cf) boolean에서
false : 0, null, undefined, NaN, ''
true : any other value
- object type (참조형 데이터): 여러 item. box container에 담은 것
- function : first-class function이야라는 말은 function도 다른 데이터 타입처럼 변수에 할당이 가능 함을 의미함 (함수의 parameter로 지정 가능하고, return type으로도 가능함)