내용을 보기 전 Scope의 개념에 대해서 알아야한다.
[Javascript] Scope
Javascript에는 Global Scope와 Function Scope 두가지만 있었으나 ES6 부터 let, const가 추가되면서 Block Scope 개념이 추가되었다.
{
let a = 1
const b = 2
console.log(a) // 1
console.log(b) // 2
}
console.log(a) // Error
console.log(b) // Error
블록 내에서 선언된 a,b는 블록 내에선 사용이 가능하나 외부에선 사용할 수 없다.
var 문은 변수를 선언하고, 선택적으로 초기화할 수 있습니다. -MDN
let 명령문은 블록 스코프의 범위를 가지는 지역 변수를 선언하며, 선언과 동시에 임의의 값으로 초기화할 수도 있습니다. -MDN
const 선언은 블록 범위의 상수를 선언합니다. 상수의 값은 재할당할 수 없으며 다시 선언할 수도 없습니다. -MDN
var | let | const | |
---|---|---|---|
스코프 | 함수 | 블록,함수 | 블록,함수 |
글로벌 스코프 | O | X | X |
함수 스코프 | O | O | O |
블록 스코프 | X | O | O |
재선언 | O | O | X |
재할당 | O | X | X |
{
let a = 1
const b = 2
var c = 3
cnosole.log(a) // 1
console.log(b) // 2
console.log(c) // 3
}
console.log(a) // Error
console.log(b) // Error
console.log(c) // 3
function test(){
console.log(a) // Error
console.log(b) // Error
console.log(c)
}
test() // 3
var은 전역변수 기능을 가지고 있어 블록 내에서 선언되더라도 다른 함수에서 사용 가능하나 나머지 let, const는 사용 불가능하다.