๐ซ var
var
๋ ๊ธฐ์กด์ ๋ณ์ ์ ์ธ ๋ฐฉ์์ผ๋ก, ํ์ฌ๋ ๊ฐ๊ธ์ ์ฌ์ฉ์ ์ง์ํ๊ณ ์๋ค.
ํน์ง:
- ํจ์ ์ค์ฝํ(Function Scope):๋ณ์๊ฐ ์ ์ธ๋ ํจ์ ๋ด๋ถ์์๋ง ์ ๊ทผ ๊ฐ๋ฅํ๋ฉฐ, ๋ธ๋ก(
{}
) ๋ด์์ ์ ์ธํ๋๋ผ๋ ๋ธ๋ก์ ๋ฌด์ํ๊ณ ์ ๊ทผํ ์ ์์ต๋๋ค. - ์ฌ์ ์ธ ๊ฐ๋ฅ:๋์ผํ ์ด๋ฆ์ ๋ณ์๋ฅผ ์ค๋ณต ์ ์ธํด๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.
- ํธ์ด์คํ (Hoisting):์ ์ธ์ด ์ฝ๋์ ์ต์๋จ์ผ๋ก ๋์ด์ฌ๋ ค์ง์ง๋ง, ์ด๊ธฐํ๋ ์ ์ธ ์ดํ์ ์ด๋ฃจ์ด์ง๋๋ค.
- ์ด๊ธฐ๊ฐ ํ ๋น์ด ์์ด๋
undefined
๋ก ์๋ ์ด๊ธฐํ.
function example() {
if (true) {
var x = 10;
}
console.log(x); // 10 (๋ธ๋ก ์ค์ฝํ ๋ฌด์)
}
var a = 5;
var a = 10; // ์ฌ์ ์ธ ๊ฐ๋ฅ
console.log(a); // 10
๐ซ let
let
์ ๋ธ๋ก ์ค์ฝํ๋ฅผ ๊ฐ์ง๋ฉฐ, ์ฌ์ ์ธ์ด ๋ถ๊ฐ๋ฅํ๋ค.
ํน์ง:
- ๋ธ๋ก ์ค์ฝํ(Block Scope):๋ณ์๊ฐ ์ ์ธ๋ ๋ธ๋ก(
{}
) ๋ด์์๋ง ์ ๊ทผ ๊ฐ๋ฅ. - ์ฌ์ ์ธ ๋ถ๊ฐ:๊ฐ์ ๋ณ์ ์ด๋ฆ์ผ๋ก ์ค๋ณต ์ ์ธํ๋ฉด ์ค๋ฅ ๋ฐ์.
- ํธ์ด์คํ ๋ฐ์ํ์ง๋ง ์ด๊ธฐํ ์ ์๋ ์ฌ์ฉ ๋ถ๊ฐ(์ผ์์ ์ฌ๊ฐ์ง๋, TDZ).
- ์ด๊ธฐ๊ฐ ์์ด ์ ์ธ ๊ฐ๋ฅํ๋ฉฐ, ๊ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ.
function example() {
if (true) {
let x = 10;
console.log(x); // 10
}
// console.log(x); // ์ค๋ฅ ๋ฐ์ (x is not defined)
}
let b = 5;
// let b = 10; // ์ค๋ฅ ๋ฐ์ (์ฌ์ ์ธ ๋ถ๊ฐ)
b = 20; // ๊ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ
console.log(b); // 20
๐ซ const
const
๋ ์์๋ฅผ ์ ์ธํ ๋ ์ฌ์ฉ๋๋ฉฐ, ํ ๋ฒ ๊ฐ์ด ํ ๋น๋๋ฉด ๋ณ๊ฒฝํ ์ ์๋ค.
ํน์ง:
- ๋ธ๋ก ์ค์ฝํ(Block Scope):
let
๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ธ๋ก ๋ด๋ถ์์๋ง ์ ๊ทผ ๊ฐ๋ฅ. - ์ฌ์ ์ธ ๋ฐ ์ฌํ ๋น ๋ถ๊ฐ:๋์ผ ์ด๋ฆ์ผ๋ก ์ ์ธํ๊ฑฐ๋ ๊ฐ์ ๋ค์ ํ ๋นํ๋ฉด ์ค๋ฅ ๋ฐ์.
- ํธ์ด์คํ ๋ฐ์ํ์ง๋ง ์ด๊ธฐํ ์ ์๋ ์ฌ์ฉ ๋ถ๊ฐ(TDZ ์กด์ฌ).
- ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํ ํ์.
- ๊ฐ์ฒด์ ๊ฒฝ์ฐ ์์ฑ ๋ณ๊ฒฝ์ ๊ฐ๋ฅํ๋ ๊ฐ์ฒด ์์ฒด ์ฌํ ๋น ๋ถ๊ฐ.
const c = 10;
// c = 20; // ์ค๋ฅ ๋ฐ์ (์ฌํ ๋น ๋ถ๊ฐ)
// const c = 30; // ์ค๋ฅ ๋ฐ์ (์ฌ์ ์ธ ๋ถ๊ฐ)
// ๊ฐ์ฒด์ ๊ฒฝ์ฐ ์์ฑ ์์ ๊ฐ๋ฅ
const obj = { name: 'Alice' };
obj.name = 'Bob'; // ๊ฐ๋ฅ
// obj = { name: 'Charlie' }; // ์ค๋ฅ ๋ฐ์ (๊ฐ์ฒด ์ฌํ ๋น ๋ถ๊ฐ)
console.log(obj.name); // Bob
๐ซ ๋น๊ต
๊ตฌ๋ถ | var | let | const |
---|---|---|---|
์ค์ฝํ | ํจ์ ์ค์ฝํ | ๋ธ๋ก ์ค์ฝํ | ๋ธ๋ก ์ค์ฝํ |
์ฌ์ ์ธ | ๊ฐ๋ฅ | ๋ถ๊ฐ๋ฅ | ๋ถ๊ฐ๋ฅ |
์ฌํ ๋น | ๊ฐ๋ฅ | ๊ฐ๋ฅ | ๋ถ๊ฐ๋ฅ |
ํธ์ด์คํ | ๋จ(์ด๊ธฐ๊ฐ undefined ) |
๋จ(์ด๊ธฐํ ์ ์ ๊ทผ ๋ถ๊ฐ) | ๋จ(์ด๊ธฐํ ์ ์ ๊ทผ ๋ถ๊ฐ) |
์ด๊ธฐํ | ์ ํ์ | ์ ํ์ | ํ์ |