호이스팅과 TDZ는 무엇일까 ?

자유의여신·2022년 5월 19일
0

호이스팅(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으로도 가능함)
profile
나만의 색깔

0개의 댓글