๐ŸŒฑJS ๊ธฐ์ดˆ ์ •๋ฆฌ(1)

์‹ ํƒœ์ผยท2024๋…„ 10์›” 15์ผ

var, let, const ์ฐจ์ด


์ค‘๋ณต ์„ ์–ธ์žฌํ• ๋‹นScope(์œ ํšจํ•œ ์ฐธ์กฐ ๋ฒ”์œ„)
varOOํ•จ์ˆ˜ ๋ ˆ๋ฒจ
letXO๋ธ”๋ก ๋ ˆ๋ฒจ { }
constXX๋ธ”๋ก ๋ ˆ๋ฒจ { }

1. ํ˜ธ์ด์ŠคํŒ…

a. var ์„ ์–ธ๋ฌธ ํ˜ธ์ด์ŠคํŒ…

    console.log(greeting);
    // undefined
    
    var greeting = 'hello';

โ†’ ์œ„ ์ฝ”๋“œ๊ฐ€ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š” ์ด์œ ๋Š” ํ˜ธ์ด์ŠคํŒ… ๋•Œ๋ฌธ์ด๋‹ค. JavaScript ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋Š” ๋ณ€์ˆ˜ ์ƒ์„ฑ์˜ ์„ ์–ธ(var greeting) ๋‹จ๊ณ„ ๋ฐ ํ• ๋‹น(= โ€˜helloโ€™) ๋‹จ๊ณ„๋ฅผ ๋ถ„ํ• ํ•œ๋‹ค. ์„ ์–ธ ๋ถ€๋ถ„์€ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— ํ˜„์žฌ ๋ฒ”์œ„์˜ ๋งจ ์œ„๋กœ ํ˜ธ์ด์ŠคํŒ…๋˜๊ณ  ์ดˆ๊ธฐ์— undefined ๊ฐ’์ด ํ• ๋‹น๋œ๋‹ค. ์ฆ‰, ์ดˆ๊ธฐํ™”๋˜๊ธฐ ์ „์— greeting ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

b. let / const ์„ ์–ธ๋ฌธ ํ˜ธ์ด์ŠคํŒ…

let ๋˜๋Š” const๋กœ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด ์‹ค์ œ๋กœ ๋ณ€์ˆ˜๋Š” ์—ฌ์ „ํžˆ ํ˜ธ์ด์ŠคํŒ…๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ฐจ์ด์ ์€ var๋Š” ์‹ค์ œ ํ• ๋‹น ๊ฐ’์ด ํ• ๋‹น๋˜๊ธฐ์ „๊นŒ์ง€ undefined ๊ฐ’์ด ํ• ๋‹น๋˜์ง€๋งŒ let / const๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ€์ˆ˜ ์ดˆ๊ธฐ์— ์–ด๋–ค ๊ฐ’๋„ ํ• ๋‹น๋˜์ง€ ์•Š๋Š”๋‹ค.

    console.log(greeting);
    // Uncaught ReferenceError: Cannot access 'greeting' before initialization
    const greeting = "hello";

โ†’ ์ด๋ฒˆ์—๋„ ํ˜ธ์ด์ŠคํŒ…์€ ๋˜์ง€๋งŒ ๋ณ€์ˆ˜๋Š” ์ดˆ๊ธฐ์— undefined๋กœ ์ดˆ๊ธฐํ™”๋œ var์™€ ๋‹ฌ๋ฆฌ ์ดˆ๊ธฐ์— ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š๋Š”๋‹ค. ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉด ๊ฐ’์„ ํ• ๋‹นํ•˜๊ธฐ ์ „์— ์ฝ˜์†” ๋กœ๊ทธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ์œ„์˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. const ๋กœ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ์ผ์ด ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋ฅผ TDZ(Temporal Dead Zone)์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ผ์‹œ์  ๋ฐ๋“œ ์กด์€ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์ผ์‹œ์ ์ธ ๋น„ํ™œ์„ฑ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

๐Ÿ’ก ๊ฒฐ๋ก  !

๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์žฌํ• ๋‹น์ด ํ•„์š”์—†๋‹ค๋ฉด const๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์žฌํ• ๋‹น์ด ํ•„์š”ํ•˜๋‹ค๋ฉด let์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๋ณ€์ˆ˜์˜ scope๋ฅผ ์ตœ๋Œ€ํ•œ ์ข๊ฒŒ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ best๋‹ค.

profile
๋…ธ์›๊ฑฐ์ธ

0๊ฐœ์˜ ๋Œ“๊ธ€