JavaScript/정의

var let const 정리 (block-level scope, function-level scope)

svdjcuwg4638 2023. 5. 9. 16:30

var

var 키워드로 선언된 변수는 함수 레벨 스코프(function-level scope)를 가집니다. 즉, 변수는 선언된 함수 내에서, 또는 함수 외부에서 (전역 스코프에서) 접근 가능합니다. 또한 var로 선언된 변수는 재선언 및 재할당이 가능합니다.

 

let

let 키워드로 선언된 변수는 블록 레벨 스코프(block-level scope)를 가집니다. 즉, 변수는 선언된 블록 (예: if 문, for 문 등의 중괄호 {} 내부) 내에서만 접근 가능합니다. let으로 선언된 변수는 재할당은 가능하지만 재선언은 불가능합니다.

 

const

const 키워드로 선언된 변수도 블록 레벨 스코프(block-level scope)를 가집니다. 하지만 const로 선언된 변수는 재선언 및 재할당이 모두 불가능합니다. 즉, 한번 선언하고 초기화한 값을 변경할 수 없습니다. 그러나 객체나 배열과 같은 참조 타입의 경우, const 변수 자체를 재할당할 수는 없지만 그 내부의 프로퍼티나 요소는 변경할 수 있습니다.

 

함수 레벨 스코프(function-level scope)

var 키워드로 선언된 변수는 함수 레벨 스코프를 가집니다. 이는 var로 선언된 변수가 그 변수가 선언된 함수 내부에서만 접근 가능하다는 것을 의미합니다. 만약 var로 선언된 변수가 함수 외부에서 선언되었다면, 그 변수는 전역 스코프를 가지며 코드의 어느 곳에서나 접근 가능합니다.

 

예제코드 ¯\_(ツ)_/¯

function myFunction() {
  var x = 10; // 함수 레벨 스코프
  if (true) {
    var y = 20; // 여전히 함수 레벨 스코프
    console.log(x); // 10을 출력합니다. x는 같은 함수 내에 있기 때문에 접근 가능합니다.
  }
  console.log(y); // 20을 출력합니다. y는 같은 함수 내에 있기 때문에 접근 가능합니다.
}
myFunction();
console.log(x); // 에러! x는 myFunction 안에서만 접근 가능합니다.
console.log(y); // 에러! y는 myFunction 안에서만 접근 가능합니다.


블록 레벨 스코프(block-level scope)

let과 const 키워드로 선언된 변수는 블록 레벨 스코프를 가집니다. 이는 let과 const로 선언된 변수가 그 변수가 선언된 블록(중괄호 {}로 둘러싸인 영역) 내부에서만 접근 가능하다는 것을 의미합니다. 블록은 함수 뿐만 아니라 if 문, for 문, while 문 등에서도 생성됩니다.

 

예제코드 ༼ つ ◕_◕ ༽つ

function myFunction() {
  let x = 10; // 블록 레벨 스코프
  if (true) {
    let y = 20; // 블록 레벨 스코프
    console.log(x); // 10을 출력합니다. x는 같은 함수 내에 있기 때문에 접근 가능합니다.
    console.log(y); // 20을 출력합니다. y는 같은 블록 내에 있기 때문에 접근 가능합니다.
  }
  console.log(y); // 에러! y는 if 문의 블록 내에서만 접근 가능합니다.
}
myFunction();
console.log(x); // 에러! x는 myFunction 안에서만 접근 가능

정리

 

  • 1. 스크립트 태그 안에 변수를 선언시 모든 함수와 {}는 참조가 가능하다.
  • 2. 변수값이 바뀌면 안되는경우 const를 사용하고 바뀌어도 되는경우는 let 과 var를 사용하자
  • 3. let와 var의 차이는 let는 선언된 함수 내부에서만 참조 가능하고 var은 어디서든 참조가 가능하다.