[JavaScript] 변수, 호이스팅, TDZ(Temporal Dead Zone)
변수는 var, let, const 3 가지가 있다.
- var, let
-
var는 선언한 후에 다시 선언이 가능.
var name = 'Mike'; console.log(name); // Mike var name = 'Jane'; console.log(name); // Jane
-
var는 선언하기 전에 사용할 수 있다. (호이스팅)
그러나 name 이라는 변수만 호이스팅 되고, 값 할당은 호이스팅 안됨.console.log(name); var name = 'Mike';
호이스팅이란?
스코프 내부 어디서든 변수 선언은 최상위에 선언된 것 처럼 행동 -
let은 실제로는 호이스팅이 되지만, 호이스팅 되지 않는것처럼 동작. 이유는 TDZ 때문
let age = 30; function showAge() { console.log(age); let age = 20; // 함수 스코프 안에서 호이스팅 일어나, // console.log 가 찍히기 전에 변수 선언만 된 것처럼 작동. // => 오류가 발생한다. // 만약, 함수 안에서 age선언이 없었다면 함수 밖에서 선언된 // age 값을 참조해 오류가 발생하지 않는다. }
TDZ(Temporal Dead Zone)이란?
변수가 할당을 받기 전에 사용하지 못하는 것.
TDZ 는 스코프 단위로 발생
-
- const
- 선언하면서 할당까지 해주어야 한다.
- 이후 할당된 값의 변경이 불가능
- 스코프
- var 는 함수 스코프
- let, const 는 블록 스코프
함수 스코프는 함수안에서 선언된 변수만 지역변수로 취급
블록 스코프는 함수 + 블록(if문, while문, for문 등...)에서 선언된 변수 모두를 지역변수로 취급
결론 : c++ 에서 하는것처럼 변수 선언하면 문제될 것이 없다.
출처 : https://www.youtube.com/watch?v=ocGc-AmWSnQ
Author And Source
이 문제에 관하여([JavaScript] 변수, 호이스팅, TDZ(Temporal Dead Zone)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hyeok-jin/JavaScript-변수-호이스팅-TDZTemporal-Dead-Zone저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)