๐Ÿ’ซ 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) ๋จ(์ดˆ๊ธฐํ™” ์ „ ์ ‘๊ทผ ๋ถˆ๊ฐ€) ๋จ(์ดˆ๊ธฐํ™” ์ „ ์ ‘๊ทผ ๋ถˆ๊ฐ€)
์ดˆ๊ธฐํ™” ์„ ํƒ์  ์„ ํƒ์  ํ•„์ˆ˜

By Dozzing

๋‹ต๊ธ€ ๋‚จ๊ธฐ๊ธฐ

์ด๋ฉ”์ผ ์ฃผ์†Œ๋Š” ๊ณต๊ฐœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•„์ˆ˜ ํ•„๋“œ๋Š” *๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค