var let const

Jnns·2023년 12월 17일
post-thumbnail

var, let, const


var

호이스팅

호이스팅되면서 초기 값이 없으면 자동으로 undefined를 초기값으로 하여 메모리를 할당한다. 그래서 선언 전에 해당 변수를 사용하려고 해도 메모리에 해당 변수가 존재하기 때문에 에러가 발생하지 않는다.

스코프

var 선언은 전역 범위 혹은 함수 범위로 지정된다.
함수 외부에서 선언될 때의 범위는 전역
함수 내에서 선언될 때는 함수 범위로 지정

중복 선언

같은 범위 내에서라면 수정이 가능하며 에러가 발생하지 않는다.


let

호이스팅

var와 마찬가지로 let 선언은 맨 위로 끌어올려진다. undefined(정의되지 않음)으로 초기화되는 var와 다르게 let의 키워드는 초기화되지 않는다. 선언 이전에 let 변수를 사용하려고 시도한다면 Reference Error(참조 오류)가 발생할 것이다.

스코프

let으로 선언된 변수는 해당 블록 내에서만 사용가능

중복 선언

var와 마찬가지로 let으로 선언된 변수는 해당 범위 내에서 업데이트될 수 있다. 하지만, var와 달리 let 변수는 범위 내에서 다시 선언할 수 없다.


const

호이스팅

호이스팅이 되면서 초기 값이 없다면 var처럼 자동으로 초기값을 할당하지 않는다(const의 경우 선언시 초기값을 할당하지 않으면 문법 에러가 난다).

스코프

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

중복 선언

const로 선언된 변수의 값이 해당 범위 내에서 동일하게 유지됨을 의미한다. 업데이트하거나 다시 선언할 수가 없다.
따라서 모든 const 선언은 선언하는 당시에 초기화되어야 한다.


정리

  • var 선언은 전역 범위 또는 함수 범위이며, let과 const는 블록 범위이다.
  • var 변수는 범위 내에서 업데이트 및 재선언할 수 있다. let 변수는 업데이트할 수 있지만, 재선언은 할 수 없다. const 변수는 업데이트와 재선언 둘 다 불가능하다.
  • 세 가지 모두 최상위로 호이스팅된다. 하지만 var 변수만 undefined(정의되지 않음)으로 초기화되고 let과 const 변수는 초기화되지 않는다.
  • var와 let은 초기화하지 않은 상태에서 선언할 수 있지만, const는 선언 중에 초기화해야한다.
  • var의 경우 버그 발생과 메모리 누수의 위험 등이 있기 때문에 var말고 let, const를 사용하시는 것이 좋다.

스코프

Scope를 우리말로 번역하면 ‘범위’라는 뜻을 가지고 있다. 즉, 스코프(Scope)란 ‘변수에 접근할 수 있는 범위’라고 할 수 있다.
자바스크립트에선 스코프는 2가지 타입이 있다.

전역 스코프(Global Scope) : 말 그대로 전역에 선언되어있어 어느 곳에서든지 해당 변수에 접근할 수 있다는 의미

지역 스코프(Local Scope) : 해당 지역에서만 접근할 수 있어 지역을 벗어난 곳에선 접근할 수 없다는 의미

함수 레벨 스코프(Function-level Scope)
자바스크립트에서 함수를 선언하면 함수를 선언할 때마다 새로운 스코프를 생성하게 된다. 그러므로 함수 몸체에 선언한 변수는 해당 함수 몸체 안에서만 접근할 수 있는데요. 이걸 함수 스코프(function-scoped)라고 한다. 함수 스코프가 바로 지역 스코프의 예라고 할 수 있다.
함수 내에서 선언된 변수는 함수 내에서만 유효하며 함수 외부에서는 참조할 수 없다. 함수 외부에서 선언한 변수는 모두 전역 변수이다.

블록 레벨 스코프(Block-level Scope)
모든 코드 블록(함수,if문,for문,while문,try/catch문 등)내에서 선언된 변수는 코드 블록 내에서만 유효하며 코드 블록 외부에서는 참조할 수 없다. 즉, 코드 블록 내부에서 선언한 변수는 지역 변수이다.

0개의 댓글