๋ฐ์ํ
var / let / const
| ๊ตฌ๋ถ | var | let | const |
|---|---|---|---|
| ์ค์ฝํ | ํจ์ ์ค์ฝํ | ๋ธ๋ก ์ค์ฝํ | ๋ธ๋ก ์ค์ฝํ |
| ์ฌ์ ์ธ | โ ๊ฐ๋ฅ | โ ๋ถ๊ฐ | โ ๋ถ๊ฐ |
| ์ฌํ ๋น | โ ๊ฐ๋ฅ | โ ๊ฐ๋ฅ | โ ๋ถ๊ฐ |
| ํธ์ด์คํ | โ (undefined๋ก) | โ (TDZ) | โ (TDZ) |
var์ ๋ฌธ์ ์
// ๋ธ๋ก ๋ฐ์ผ๋ก ์์ด๋์ด
if (true) {
var x = 10;
}
console.log(x); // 10 โ ์๋์น ์๊ฒ ์ ๊ทผ๋จ
// let์ด๋ผ๋ฉด?
if (true) {
let y = 10;
}
console.log(y); // ReferenceError
// for ๋ฃจํ ํด๋ก์ ๋ฒ๊ทธ
for (var i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 100);
}
// 3, 3, 3 โ var๋ ํจ์ ์ค์ฝํ๋ผ ๋ฃจํ ๋๋ ์์ ์ i=3์ ์ฐธ์กฐ
for (let i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 100);
}
// 0, 1, 2 โ let์ ๋งค ๋ฐ๋ณต๋ง๋ค ์๋ก์ด i๊ฐ ์๊น
const์ "๋ถ๋ณ"์ ๋ฐ์ธ๋ฉ ๊ธฐ์ค
const obj = { name: "Alice" };
obj.name = "Bob"; // โ
๊ฐ๋ฅ โ ๋ด๋ถ ๋ณ๊ฒฝ
obj = {}; // โ ์๋ฌ โ ์ฌํ ๋น ๋ถ๊ฐ
์ค๋ฌด ๊ธฐ์ค
๊ธฐ๋ณธ์ ์ผ๋ก const
โ ์ฌํ ๋น ํ์ํ๋ฉด let
โ var๋ ์ฐ์ง ์๋๋ค๋ฐ์ํ