Home [Javascript] 변수
Post
Cancel

[Javascript] 변수

이번엔 변수에 대한 추가 정리를 할것이다.

1. Hoisting, TDZ

  • 먼저 변수를 설명하기에 앞서 필요한 지식인 Hoisting(호이스팅)TDZ(Temporal Dead Zone 에 대해 설명하겠다.

    • Hoisting (호이스팅) : 호이스팅이란 자바스크립트 함수가 실행되기 전 함수에 필요한 모든 선언들을 최상단으로 끌어올려서 선언하는 것이다.

      호이스팅은 var로 선언된 변수함수 선언문 에서만 일어난다.

      1
      2
      3
      
      Hoisting
      console.log(name); // "Mike" 출력
      var name = "Mike";
      
    • TDZ (Temporal Dead Zone)

      1
      2
      3
      
      console.log(age); // TDZ
      const age = 30; // 선언 및 할당
      console.log(age); // 30 출력
      

      이와 같이 변수를 선언하고 할당하기 전까지는 사용할 수 없는것이 TDZ의 영향을 받는것이다.

2. 변수란?

  • 자바스크립트에서 변수는 쉽게 말해서 데이터를 담아두는 공간이라고 할 수 있다. 변수를 사용하기 위해서는 변수를 선언한 후에 값을 저장해주면 된다.

  • 변수를 선언은 var , let, const를 사용해서 한다.

    • var : 변수선언 이후 어디서든 재선언, 재할당이 가능하다.

      1
      2
      3
      4
      5
      6
      
      var name = "Tom";
      console.log(name); // "Tom" 출력
      var name = "Mike"; // 재선언
      console.log(name); // "Mike" 출력
      name = "Jake"; // 재할당
      console.log(name); // "Jake" 출력
      
    • let : 재선언은 불가하지만 재할당은 가능하다.

      1
      2
      3
      4
      5
      6
      
      let age = 30;
      console.log(age); // 30 출력
      let age = 10; // 재선언
      console.log(age); // 오류발생
      age = 10; // 재할당
      console.log(age); // 10 출력
      
    • const : 재선언도 재할당도 불가하다. 값이 변하지 않는 상수를 선언할 때 사용하는 것이 좋다. 변수명은 대문자로만 이루어야 상수라는걸 알기 편하다.

      1
      2
      3
      4
      5
      6
      
      const PI = 3.14;
      console.log(PI); // 3.14 출력
      const PI = 3.1415;
      console.log(PI); // 오류발생
      PI = 3.1415;
      console.log(PI); // 오류발생
      

3. 변수 생성 과정

  • 변수를 선언하고 변수가 생성될 때는 변수 선언 -> 변수 초기화 -> 변수에 값 할당 의 순서를 거치는데 var, let, const 의 과정이 각각 다르다.

    • var 생성과정 : 변수 선언 및 초기화 -> 값 할당 varHoisting되어 TDZ(Temporal Dead Zone)의 영향을 받지 않기 때문에 어느 위치에서도 선언할 수 있다.

    • let 생성과정 : 변수 선언 -> 변수 초기화 -> 변수에 값 할당 let은 값을 할당하기 직전에 변수를 초기화한다.

    • const 생성과정 : 변수 선언 및 초기화, 할당

      const는 변수선언, 초기화, 할당을 모두 동시에 해야한다. let이나 var과 다르게 선언만 하고 나중에 값을 할당하는 것은 불가능하다.

      1
      2
      3
      4
      5
      6
      
      const gender;
      gender = "female";
      console.log(gender); // 오류발생
      ------------------------------------------------------------------------
      const gender = "female";
      console.log(gender); // "female" 출력
      

4. 스코프

  • var, let, const는 스코프도 다르다.

    • var : 함수 스코프 (function-scoped)

      함수 스코프인 var 는 함수블록 내에서 선언 되었을때 함수블록 외부에서 호출을 하게되면 오류가 발생한다.

      1
      2
      3
      4
      5
      
      function plus(num1, num2) {
      var answer = num1 + num2;
      }
      plus(1, 2); // 3 
      console.log(answer); // 오류발생
      

      하지만 함수를 제외한 다른 블록에서 선언한 var는 블록 외부에서 호출할 수 있다.

      1
      2
      3
      4
      5
      
      const PI = 3.14;
      if (PI > 0) {
      var result = "true";
      }
      console.log(result); // "true" 출력
      
      • let, const : 블록 스코프 (block-scoped)

      let과 const는 블록 스코프라고 하는데 블록 스코프는 함수 스코프와 다르게 모든 코드블록(function, if문, for문, while문, try/catch문)에서 선언된 변수들은 코드블록 외부에서 접근할 수 없다.

      1
      2
      3
      4
      
      function plus(1, 2){
      const result = "false";
      }
      console.log(result); // 오류발생
      
      1
      2
      3
      4
      
      if(1 > 2){
      let ans = "false";
      }
      console.log(ans); // 오류발생
      
      1
      2
      3
      4
      
      for(let i = 0; i < 10; i++) {
      const answer = "false";
      }
      console.log(answer); // 오류발생
      

      즉, 함수스코프는 함수 외의 다른 블록에는 아무런 영향을 받지 않는다.

This post is licensed under CC BY 4.0 by the author.