반응형
var
function-scoped 변수 또는 전역변수로 선언할 때 사용한다.
var x = 1;
if (x === 1) {
var x = 2;
console.log(x);
// expected output: 2
}
console.log(x);
// expected output: 2
var 선언의 범위가 function-scoped이면서 전역이기 때문에,
첫 번째 줄에 x와 네 번째 줄에 x가 같은 것으로 취급되었다.
hoisting
var 선언은 어디에 있든지, 어떤 코드가 실행되기 전에 처리된다. 이를 hoisting이라고 한다.
이는 즉슨, 선언하려고 하는 변수를 무려 선언하는 코드보다 위에서도 사용할 수 있다.
bla = 2;
var bla;
위와 같이 사용이 가능하다.
let
block-scoped 변수를 선언할 때 사용한다. 따라서, 이를 이용하면 private 개념을 구현할 수 있다.
let x = 1;
if (x === 1) {
let x = 2;
console.log(x);
// expected output: 2
}
console.log(x);
// expected output: 1
let 선언의 범위는 block-scoped이므로, if문 내부에 선언된 x와 if문 외부에 선언된 x는 엄연히 서로 다른 변수이다.
let x = 1;
switch(x) {
case 0:
let foo;
break;
case 1:
let foo; // SyntaxError for redeclaration.
break;
}
같은 블럭에서는 재선언이 불가능하다.
const
let과 마찬가지로 block-scoped인데, 할당값을 바꿀 수 없고 재선언 될 수 없다.
const number = 42;
try {
number = 99;
} catch (err) {
console.log(err);
// expected output: TypeError: invalid assignment to const `number'
// Note - error messages will vary depending on browser
}
console.log(number);
// expected output: 42
반응형