let, const, var (scope 개념에서의 차이)

이동현·2023년 3월 14일
0

코드 캠프 블로그

목록 보기
4/50

let, const, var (scope 개념에서의 차이)

1. Var

1) Scope of var

  • var의 범위는 기본적으로 전역범위 혹은 함수 범위로 지정
  • 그렇기 때문에 var로 선언된 모든 변수는 전체에서 사용 가능
  • but var가 함수 내에서 선언될 때는 함수 버위로 지정!!
    var tester = "hey hi";    
    function newFunction() {
        var hello = "hello";
    }
    console.log(hello); // error: hello is not defined

2) Var의 호이스팅

호이스팅이란 변수와 함수 선언이 맨위로 이동되는 자바스크립트 매커니즘이다.

    console.log (greeter);
    var greeter = "say hello"
// 호이스팅이 된 예시
    var greeter;
    console.log(greeter); // greeter is undefined
    greeter = "say hello"

var변수는 범위 내에서 맨 위로 올려지고, 값은 undefined(정의되지 않음)으로 초기화됩니다.
이같은 문제 때문에 let과 const가 필요하게 됨.

2. Let

1) 블록 범위 let

  • 블록은 {}로 바인딩된 코드 청크이며, 하나의 블록은 중괄호 속에서 존재하고 중괄호 안에 있는 것은 모두 블록 범위입니다.
  • let으로 선언된 변수는 해당 블록 내에서만 사용가능하다.
   let greeting = "say Hi";
   let times = 4;
   if (times > 3) {
        let hello = "say Hello instead";
        console.log(hello);// "say Hello instead"
    }
   console.log(hello) // hello is not defined

- let은 블록 범위이기에 범위 밖에서는 확인이 불가능하다.

2) let은 업데이트는 가능하지만, 재선언은 불가

  let greeting = "say Hi";
    let greeting = "say Hello instead"; // error: Identifier 'greeting' has already been declared
//그러나 동일한 변수가 다른 범위 내에서 정의된다면, 에러는 더 이상 발생하지 않습니다.
    let greeting = "say Hi";
    if (true) {
        let greeting = "say Hello instead";
        console.log(greeting); // "say Hello instead"
    }
    console.log(greeting); // "say Hi"

3) let의 호이스팅

let도 var처럼 호이스팅이 되지만 선언 이전에 let변수를 사용하려고
시도한다면 Reference Error(참조 오류)가 발생한다.

3. Const

1)블록 범위 const

let 선언처럼 const 선언도 선언된 블록 범위 내에서만 접근 가능

2) const는 업데이트도, 재선언도 불가능하다

const로 선언된 변수의 값이 해당 범위 내에서 동일하게 유지됨을 의미한다.
업데이트하거나 다시 선언할 수가 없다.

    const greeting = "say Hi";
    greeting = "say Hello instead";// error: Assignment to constant variable. 
 const greeting = "say Hi";
    const greeting = "say Hello instead";// error: Identifier 'greeting' has already been declared
// 따라서 모든 const 선언은 선언하는 당시에 초기화되어야 합니다.

3) const의 호이스팅

let과 마찬가지로 const 선언도 맨 위로 끌어올려지지만, 초기화되지는 않는다.

4. 정리

  • var 선언은 전역 범위 또는 함수 범위이며, let과 const는 블록 범위이다.
  • var 변수는 범위 내에서 업데이트 및 재선언할 수 있다. let 변수는 업데이트할 수 있지만, 재선언은 할 수 없다. const 변수는 업데이트와 재선언 둘 다 불가능하다.
  • 세 가지 모두 최상위로 호이스팅된다. 하지만 var 변수만 undefined(정의되지 않음)으로 초기화되고 let과 const 변수는 초기화되지 않는다.
  • var와 let은 초기화하지 않은 상태에서 선언할 수 있지만, const는 선언 중에 초기화해야한다.

0개의 댓글