자바스크립트에서 변수를 선언하는 타입은 var, let, const 세가지이다.
일단 크게 var
과 let, const
로 나누면 var
은 function-scoped
이며 변수 재선언이 가능하고 let, const
는 block-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