2018-09-30 TIL(자바스크립트 var, let, const 차이점)

자바스크립트에서 변수를 선언하는 타입은 var, let, const 세가지이다.

일단 크게 varlet, const로 나누면 varfunction-scoped이며 변수 재선언이 가능하고 let, constblock-scoped이며 재선언이 불가능하다. 그 중 let은 변수에 재할당이 가능하지만 const는 재할당이 불가능하다.

참고로 변수는 다음과 같이 3단계로 걸쳐 생성된다.

  • 선언 : 변수(명)를 등록
  • 초기화 : 변수를 메모리에 할당(선언+할당)
  • 할당 : 변수에 데이터 실제값을 넣는 것
// let
let a = 'test'
// 변수 a를 재선언시
let a = 'test2' // Uncaught SyntaxError: Identifier 'a' has already been declared
a = 'test3'     // 값 재할당 가능

// const
const b = 'test'
// 변수 b를 재선언시
const b = 'test2' // Uncaught SyntaxError: Identifier 'a' has already been declared
// 값 재할당 불가능
b = 'test3'    // Uncaught TypeError:Assignment to constant variable.

function-scoped

// var는 function-scope이기 때문에 for문이 끝난다음에 i를 호출하면 값이 출력이 잘 된다.
for(var j=0; j<10; j++) {
  console.log('j', j)
}
console.log('after loop j is ', j) // after loop j is 10


// 아래의 경우에는 에러가 발생한다.
function counter () {
  for(var i=0; i<10; i++) {
    console.log('i', i)
  }
}
counter()
console.log('after loop i is', i) // ReferenceError: i is not defined

Comments