[Javascript] 변수의 범위

Jane Yeonju Kim·2022년 1월 22일
3

JavaScript

목록 보기
4/14
post-thumbnail

var 변수

function level scope다.
함수 범위 안으로 들어가면 그 함수 내에서만 쓸 수 있다.
어떤 함수의 범위 안에도 들어가지 않았다면 전역 변수로 쓰인다.

var a = 'a'
console.log(a)   // a

function varA() {
  if (true) {
	  var a = 7
  }
  return a
}
console.log(varA())  // 7

var a = 'b'
console.log(a)  // b

그런데 최근에는 var 변수를 호이스팅때문에 거의 안 쓴다고 한다.

function varA() {
  a = 'a'
  var a
  return a
}
console.log(varA())    // a

호이스팅때문에 선언한 적 없는 변수에 값부터 넣고 나중에 할당하는 것이 가능하다..


let 변수

block level scope다.
블록 단위로 범위가 제한된다.
중복 선언이 불가능하다.

let a = 'a'
console.log(a)    // a

function letA() {
  if (true) {
    let a = 7
  }
  return a
}
console.log(letA())   // a

let a = 'b'     //  SyntaxError: Identifier 'a' has already been declared

letA함수 안의 a 변수는 if문의 {}안에서 선언되었기 때문에
if문이 끝남과 동시에 사라지고 전역변수 a가 반환되었다.





const 상수

let변수와 마찬가지로 block level scope다.
상수는 π = 3.14 처럼 변하지 않는 값을 저장해둘 때 사용한다.
중복 선언은 당연히 불가능하고 한번 선언한 값을 바꿀 수 없다.

const a = 'a'
a = 'b'  //  TypeError: Assignment to constant variable.

선언과 함께 값을 할당해줘야 한다.

const a
console.log(a)   // SyntaxError: Missing initializer in const declaration

함수나 조건문 안에 const 상수가 또 선언되면 오류가 날 것 같지만
{}안으로 범위가 제한되기 때문에 오류가 나지 않는다.

const a = 'a'
console.log(a)   // a

function constA() {
  if (true) {
    const a = 7
  }
  const a = 'b'
  return a
}
console.log(constA())  // b


Javascript Scope에 대한 더 자세한 설명

profile
안녕하세요! 김개발자입니다 👩‍💻 🐈

0개의 댓글