[ES6+] hoisting & Temporal Dead Zone (호이스팅과 TDZ)


var name = 'sora';
console.log(name);
//sora

당연히 sora가 출력된다

그렇다면… 이렇게 순서를 바꾸면?!

console.log(name);
var name = 'sora';
//undefined

undefined가 출력된다.

``

위에서 아래로 코드가 실행되는 자바스크립트의 특성을 고려해본다면

상식적으로 변수가 선언되지 않았기 때문에 당연히 에러를 뿜어야하지만

에러가 아니고 그냥 언디파인을 되돌려준다

이유는?

호이스팅되기 때문!

호이스팅이 뭐냐면,

호이스팅

출처 https://www.ergonomicpartners.com/store/2-ton-harrington-ner-electric-chain-hoist

이런거임ㅋㅋㅋ 위로 올리는 거

.

이 말은,

var name;
console.log(name);
name = 'sora';
//undefined

이것과 똑같다는 거다.

var로 선언된 변수가 가장 최상위로 위로 보내지는것

그러니 에러가 아니라 언디파인을 되돌려주는 것이다

그치만 이건 문제가 있다.

개발자가 바보같은 코드를 썼을때 ‘에러발생🚨 ‘이라고 미리 알려주어야하는데

그냥 넘어가버린다는 것!

버뜨, 여기서 var 대신에 let 을 사용하게 되면 에러를 뿜어준다

고로 let을 쓰라 이마뤼야~~~~~

let을 쓰게 되면 탑으로 올라가지 않는다(호이스팅 되지 않음)

*하지만 정확하게 말하자면 호이스팅되지 않는게 아니라 선언되기 전까지 호이스팅되지 않는다는게 정확할듯

*강의에서는 간단하게 하기 위해서 생략한듯 싶다


TDZ은 변수가 닿을 수 없는 곳에 위치한 상태이다. 스코프 안에 존재하지만 선언되지는 않는 것들

let과 const변수는 TDZ안에 그들이 선언될때까지 스코프안에 존재한다.

https://www.freecodecamp.org/news/what-is-the-temporal-dead-zone/에서 정리를 잘 해주었는데

헷갈린다면,

변수가 호이스팅될때 var 는 호이스팅과정에서 값들을 디폴트로 초기화시켜버린다(그러므로 undefined뜸)

그치만 letconst 는 호이스팅 되긴하지만 undefined으로 자동 설정되지는 않는다는 것이다!

``

https://www.freecodecamp.org/news/what-is-the-temporal-dead-zone/ 와

노마드코더의 ‘ES6의 정석’을 듣고 정리 =)




© 2018. by sora

Powered by sora