[JavaScript] 변수, 호이스팅, TDZ(Temporal Dead Zone)

서혁진·2021년 7월 19일
0

변수는 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

profile
안녕하세요

0개의 댓글