let
과 var
의 차이점let: block scope 안에서 유효한 스코프를 가지고 있으며, 지역변수를 선언한다.
var: function scope 안에서 유효한 스코프를 가지고 있으며, 전역변수를 선언할 수 있다.
let
은 전역 객체를 통해 접근할 수 없지만 var
는 접근이 가능하다.
let a = 1;
var b = 2;
console.log(window.a); // undefined
console.log(window.b); // 2
let
은 재선언 할 수 없지만, var
는 재선언 할 수 있다.
const
는 let
과 같은 유효범위를 가지고 선언 후, 값을 변경할 수 없다.
Block Scope란
{}
중괄호를 이용하여 구분된 영역을 말한다.{ let a=1; } console.log(a); // error
Block Scope
에서 유효한 스코프를 가지고있으며, 지역 변수를 선언한다.
let c = 1;
if (true) {
let d = 2;
}
console.log(c + d); // ?
Block Scope
에서 유효한 스코프를 가지고 있기 때문에 d
를 참조할 수 없다.
for (let i = 0; i < 10; i++) {
console.log(i);
}
console.log(i); // error
for (let i = 1; i < 11; i++) {
setTimeout(function () {
console.log(i);
}, i * 1000);
}
let
은 재선언을 할 수 없지만 재할당은 가능하다.let a = 1;
if (true) {
let a = 2;
console.log(a);
}
console.log(a); // error
let a = 1;
if (true) {
a = 2;
console.log(a);
}
console.log(a); // 2
let
은 hoisting은 되지만 error를 발생한다.let
은 초기 값을 할당하지 않으면 undefined
가 초기 값으로 할당된다.let a;
console.log(a) // undefined
function doSomething() {
console.log(bar);
console.log(foo);
var bar = 1;
let foo = 2;
}
doSomething();
let
을 이용하여 선언한 변수는 글로벌 객체에 입력되지 않는다.var x = 'global x';
let y = 'global y';
console.log(window.x); // 'global x'
console.log(window.y); // undefined
function scope 안에서 유효한 스코프를 가지고 있으며, 전역변수를 선언할 수 있다.
function scope
function foo () { for (var i = 0; i < 10; i++) { console.log(i); } console.log(i); // 10 }
foo();
## 2. `var`는 재선언이 가능하다.
```javascript
var a = 1;
if (true) {
var a = 2;
console.log(a);
}
console.log(a); // 2
var
를 이용하여 선언한 변수는 글로벌 객체에 입력된다.var x = 'global x';
let y = 'global y';
console.log(window.x); // 'global x'
console.log(window.y); // undefined
var
의 hoistingvar
는 초기 값을 할당하지 않으면 undefined
가 초기 값으로 할당된다.var a;
console.log(a); // undefined
function doSomething() {
console.log(bar); // undefined
var bar = 1;
}
doSomething();
hoisting이 되면서 콘솔에 undefined
가 출력된다.
const
를 이용하여 선언한 변수는 let
을 이용하여 선언한 변수와 거의 동일하다. 다만 재할당을 할 수 없다.
const a; // error
const a = 5;
const a = 2; // error
const foo = 2;
foo = 3; // error
const obj = {};
obj.say = 'hello';