๋„ˆ๋ฌด ๊ธฐ๋ณธ์ ์ธ JS ๊ธฐ์ดˆ์ง€๋งŒ ํ—ท๊ฐˆ๋ฆฌ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์œผ๋‹ˆ ์ž‘์„ฑํ•ด๋ณธ๋‹ค.
์šฐ์„  ๋ณ€์ˆ˜ ์„ ์–ธ ๋ถ€ํ„ฐ ์•Œ์•„๋ณด์ž

๋ณ€์ˆ˜ ์„ ์–ธ?

  • ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฆ„์„ ๋งŒ๋“ค๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜๋Š” ๊ฒƒ์ด๋‹ค
  • JS์˜ ๋ณ€์ˆ˜ ์„ ์–ธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” var, let, const 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค

var, let, const์˜ ์ฐจ์ด์ ์„ ์•Œ์•„๋ณด๊ธฐ ์ „์— ์žฌ์„ ์–ธ, ์žฌํ• ๋‹น, ํ˜ธ์ด์ŠคํŒ… ์ด๋ผ๋Š” ์šฉ์–ด์— ๋Œ€ํ•ด ๋จผ์ € ์•Œ์•„๋ณผ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

์žฌ์„ ์–ธ

  • ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๋ณ€์ˆ˜๋ฅผ ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ๋‹ค์‹œ ์„ ์–ธํ•˜๋Š” ๊ฒƒ
    var x = 1;
    var x = 2;
    

    ์žฌํ• ๋‹น

  • ์ด๋ฏธ ์„ ์–ธ๋œ ๋ณ€์ˆ˜์— ์ƒˆ๋กœ์šด ๊ฐ’์„ ๋‹ค์‹œ ๋„ฃ๋Š” ๊ฒƒ
    var y = 1;
    y = 2;
    

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

  • ๋ณ€์ˆ˜ ์„ ์–ธ์„ ์ฝ”๋“œ ๋งจ ์œ„๋กœ ๋Œ์–ด์˜ฌ๋ฆฐ ๊ฒƒ์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌํ•˜๋Š” JS ๋™์ž‘
  • ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜๋ฉด ์‹œํ—˜ ๋ณด๊ธฐ์ „์— ์ด๋ฆ„์„ ๋จผ์ € ์ ๊ณ  ๋ฌธ์ œ๋ฅผ ๋‚˜์ค‘์— ํ‘ธ๋Š”๊ฒƒ๊ณผ ๊ฐ™๋‹ค
console.log(x);
var x = 5;

// ์ด๋Ÿฐ์‹์œผ๋กœ ์งœ๋„ ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š๋Š”๋ฐ JS์—”์ง„์€ ์ด ์ฝ”๋“œ๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ํ•ด์„ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค

var x;           // ์„ ์–ธ ๋จผ์ €
console.log(x); // undefined
x = 5;           // ๊ฐ’ ํ• ๋‹น

์ด๊ฒŒ ๋ฐ”๋กœ ํ˜ธ์ด์ŠคํŒ…์ด๋‹ค!


๋‹ค์Œ์€ var, let, const์˜ ์ฐจ์ด์ ์ด๋‹ค

var

  • ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„
    • ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด ํ•จ์ˆ˜ ์•ˆ์—์„œ๋Š” ๋‹ค ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ (๋ธ”๋ก ๋ฌด์‹œ)
        if (true) {
        var x = 10;
        }
        console.log(x); // 10 
      
  • ์žฌ์„ ์–ธ ๊ฐ€๋Šฅ
      var x = 10;
      var x = 20;
      console.log(x); // 20
    
  • ์žฌํ• ๋‹น ๊ฐ€๋Šฅ
      var n = 5;
      n = 10;
    
      console.log(n); // 10
    
      // ํƒ€์ž… ๋˜ํ•œ ์ž์œ ๋กญ๊ฒŒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
      var value = 1;
      value = "hello";
      value = true;
    
      console.log(value); // true
    
  • ํ˜ธ์ด์ŠคํŒ…
    • ์„ ์–ธ + undefined ์ดˆ๊ธฐํ™”๊นŒ์ง€ ํ˜ธ์ด์ŠคํŒ…
        console.log(v); // undefined
        var v = 5;
      
    • ์„ ์–ธ ์ „์— ์‚ฌ์šฉํ•ด๋„ ์˜ค๋ฅ˜๊ฐ€ ์•ˆ๋‚˜์ง€๋งŒ ๋ฒ„๊ทธ๊ฐ€ ์กฐ์šฉํžˆ(undefined)์ˆจ์–ด๋ฒ„๋ฆผ -> ์œ„ํ—˜, ๋””๋ฒ„๊น…์˜ ์–ด๋ ค์›€
    • ํ•จ์ˆ˜ ํ‘œํ˜„์‹์˜ ํ˜ธ์ด์ŠคํŒ…
        add(2,3); // TypeError
      
        var add = function (a,b) {
            return a + b;
        }
      
      • var๋Š” ํ˜ธ์ด์ŠคํŒ…์€ ๋˜์ง€๋งŒ ์ด๋Ÿฐ์‹์œผ๋กœ ํ•จ์ˆ˜ ์•ˆ์— ์ ์œผ๋ฉด undefined๊ธฐ ๋•Œ๋ฌธ์— ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค

let

  • ๋ธ”๋ก ์Šค์ฝ”ํ”„
    • {}์•ˆ์—์„œ๋งŒ ์œ ํšจ
        if (true) {
        let y = 10;
        }
        console.log(y); // ReferenceError
      
  • ์žฌ์„ ์–ธ ๋ถˆ๊ฐ€๋Šฅ
      let x = 10;
      let x = 20; // ์—๋Ÿฌ
    
  • ์žฌํ• ๋‹น ๊ฐ€๋Šฅ
      let n = 5;
      n = 10;
    
      console.log(n); // 10
    
      // ํƒ€์ž… ๋˜ํ•œ ์ž์œ ๋กญ๊ฒŒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
      let value = 1;
      value = "hello";
      value = true;
    
      console.log(value); // true
    
  • ํ˜ธ์ด์ŠคํŒ…
    • ์„ ์–ธ ๋งŒ ํ˜ธ์ด์ŠคํŒ…
        console.log(l); // ReferenceError
        let l = 5;
      
    • ์„ ์–ธ์ด ํ˜ธ์ด์ŠคํŒ… ๋˜์ง€๋งŒ ์ดˆ๊ธฐํ™” ์ „๊นŒ์ง€๋Š” TDZ(Temporal Dead Zone)์œผ๋กœ ์ ‘๊ทผ ์‹œ ์—๋Ÿฌ ๋ฐœ์ƒ -> ๋””๋ฒ„๊น… ์‰ฌ์›€ (์ฆ‰์‹œ ์—๋Ÿฌ)

const

  • ๋ธ”๋ก ์Šค์ฝ”ํ”„
    • {}์•ˆ์—์„œ๋งŒ ์œ ํšจ
        if (true) {
        const y = 10;
        }
        console.log(y); // ReferenceError
      
  • ์žฌ์„ ์–ธ ๋ถˆ๊ฐ€๋Šฅ
      const x = 10;
      const x = 20; // ์—๋Ÿฌ
    
  • ์žฌํ• ๋‹น ๋ถˆ๊ฐ€๋Šฅ
      const n = 5;
      n = 10; // ์—๋Ÿฌ
    
  • ํ˜ธ์ด์ŠคํŒ…
    • ์„ ์–ธ ๋งŒ ํ˜ธ์ด์ŠคํŒ… (let๊ณผ ๋™์ผ)
        console.log(l); // ReferenceError
        const l = 5;
      
    • ์„ ์–ธ์ด ํ˜ธ์ด์ŠคํŒ… ๋˜์ง€๋งŒ ์ดˆ๊ธฐํ™” ์ „๊นŒ์ง€๋Š” TDZ(Temporal Dead Zone)์œผ๋กœ ์ ‘๊ทผ ์‹œ ์—๋Ÿฌ ๋ฐœ์ƒ -> ๋””๋ฒ„๊น… ์‰ฌ์›€ (์ฆ‰์‹œ ์—๋Ÿฌ)

๋งˆ๋ฌด๋ฆฌ

var, let๊ณผ ๋‹ฌ๋ฆฌ const๋Š” ์žฌ์„ ์–ธ๋„ ์žฌํ• ๋‹น๋„ ์•ˆ๋˜๋Š”๋ฐ ๊ทธ๋Ÿผ ์™œ ์‚ฌ์šฉํ• ๊นŒ? ๋ผ๋Š” ์˜๋ฌธ์ด ์ƒ๊ฒผ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐ˜๋Œ€๋กœ ์ƒ๊ฐํ•˜๋ฉด const๋Š” ์˜๋„ํ•˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ์„ ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ๋ง‰๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ ์ œํ•œ์ด ๋งŽ์„ ์ˆ˜๋ก ์•ˆ์ „ํ•˜๋‹ค๋Š” ๋œป์ด๋‹ค.
๋ฐ˜๋Œ€๋กœ var๋Š” ์žฌ์„ ์–ธ๋„ ์žฌํ• ๋‹น๋„ ๋ชจ๋‘ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ๋ณ€์ˆ˜์˜ ๋ณ€๊ฒฝ ํ๋ฆ„์„ ์ถ”์ ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์„ฑ์€ ๋””๋ฒ„๊น…์„ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค๊ณ , ํ˜‘์—… ํ™˜๊ฒฝ์—์„œ๋Š” ์น˜๋ช…์ ์ธ ๋ฒ„๊ทธ๋กœ ์ด์–ด์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๋‹ค. (๊ทธ๋Ÿฌ๋ฏ€๋กœ ์‚ฌ์šฉ ๊ถŒ์žฅ x)
let์€ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ์ผ๋ถ€ ํ•ด๊ฒฐํ•ด ์žฌ์„ ์–ธ์„ ๋ง‰๊ณ  ๋ธ”๋ก ์Šค์ฝ”ํ”„๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ, ์—ฌ์ „ํžˆ ์žฌํ• ๋‹น์€ ํ—ˆ์šฉํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•˜๋Š”์ง€, ์•„๋‹ˆ๋ฉด ์‹ค์ˆ˜๋กœ ๋ณ€๊ฒฝ๋œ ๊ฒƒ์ธ์ง€ ์ฝ”๋“œ๋ฅผ ์ฝ๋Š” ์‚ฌ๋žŒ์ด ๋งค๋ฒˆ ํŒ๋‹จํ•ด์•ผ ํ•œ๋‹ค๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค.

ํƒœ๊ทธ:

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: