var: 재선언 O 재할당 O 함수레벨 스코프
let: 재선언 X 재할당 O 블록레벨 스코프
const: 재선언 X 재할당 X 블록레벨 스코프
함수레벨 스코프:
블록레벨 스코프:
var a = 'global';
function foo() {
var b = 'in a function foo';
console.log(b);
{
var c = 'in a block foo';
console.log(b);
}
console.log(c);
}
foo();
function bar() {
var d = 'in a function bar';
console.log(d);
console.log(a);
console.log(b);
console.log(c);
}
bar();
// in a function foo
// in a function foo
// in a block foo
// in a function bar
// global
// ReferenceError: b is not defined
// ReferenceError: c is not defined
let foo = 'global';
{
let bar = 'in a block';
console.log(foo);
console.log(bar);
}
console.log(foo);
console.log(bar);
// global
// in a block
// global
// ReferenceError: bar is not defined