πŸ’‘ μ§€λ‚œμ‹œκ°„μ—λŠ” Global Scope(μ „μ—­ μŠ€μ½”ν”„), Local Scope(μ§€μ—­ μŠ€μ½”ν”„)에 λŒ€ν•΄μ„œ μ‚΄νŽ΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€. μ΄λ²ˆμ‹œκ°„μ—λŠ” ES6μ—μ„œ λ“±μž₯ν•œ const, letκ³Ό κ΄€λ ¨ν•˜μ—¬ Function Scope(ν•¨μˆ˜ μŠ€μ½”ν”„)와 Block Scope(블둝 μŠ€μ½”ν”„)에 λŒ€ν•΄μ„œλ„ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€ :)


Function Scope(ν•¨μˆ˜ μŠ€μ½”ν”„)

ν•¨μˆ˜ μŠ€μ½”ν”„λŠ” ν•¨μˆ˜μ— μ˜ν•΄μ„œ μƒκΈ°λŠ” μœ νš¨λ²”μœ„ μž…λ‹ˆλ‹€.
μš”κ±΄ μ΄μ „μ‹œκ°„μ— μ‚΄νŽ΄λ³΄μ•˜μ£ ?πŸ˜‰


Block Scope(블둝 μŠ€μ½”ν”„)

λΈ”λŸ­(β€˜{}’) 에 μ˜ν•΄μ„œ μƒκΈ°λŠ” μœ νš¨λ²”μœ„ μž…λ‹ˆλ‹€.
쑰금 ν—·κ°ˆλ¦¬μ‹€ 수 μžˆλŠ”λ° κ·Έλƒ₯ μ‰½κ²Œ {}둜 μŒ“μ—¬μ§„ 것은 μ „λΆ€ 블둝 μŠ€μ½”ν”„λΌκ³  λ³΄μ‹œλ©΄ λ©λ‹ˆλ‹€!
ex. forλ¬Έ, switchλ¬Έ, whileλ¬Έ …


var, const / let의 μŠ€μ½”ν”„

  • var: ν•¨μˆ˜ μŠ€μ½”ν”„λ₯Ό κ°–λŠ” λ³€μˆ˜ 선언에 μ‚¬μš©λ©λ‹ˆλ‹€.
  • const / let: 블둝 μŠ€μ½”ν”„λ₯Ό κ°–λŠ” μ§€μ—­ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ”λ° μ‚¬μš©λ©λ‹ˆλ‹€.
    • const: 단 ν•œλ²ˆλ§Œ ν• λ‹Ήν•  수 μžˆλŠ” μƒμˆ˜(λ³€μˆ˜)λ₯Ό μ„ μ–Έν•˜λŠ”λ° μ‚¬μš©. μž¬μ„ μ–Έ, λ³€μˆ˜ μž¬ν• λ‹Ή λΆˆκ°€λŠ₯. λ°˜λ“œμ‹œ μ΄ˆκΈ°ν™” ν•„μš”.
    • let: μž¬μ„ μ–Έμ΄ λΆˆκ°€λŠ₯. λ³€μˆ˜ μž¬ν• λ‹Ήμ€ κ°€λŠ₯.


ν•¨μˆ˜ μŠ€μ½”ν”„

μ„ μ–Έν•œ ν•¨μˆ˜ 내에 μžˆλŠ” var,const와 let은 λͺ¨λ‘ ν•΄λ‹Ή ν•¨μˆ˜ λ‚΄μ—μ„œ μœ νš¨ν•©λ‹ˆλ‹€.

  • μ˜ˆμ‹œ 1 - var
    var a = 30;
    
    (function() {
      var a = 10;
    
      (function() {
          var a = 20;
          console.log(a); // 20
      })()
        
        console.log(a) // 10
    })()
    
    console.log(a); // ReferenceError: a is not defined
    
  • μ˜ˆμ‹œ2 - const
    function duckHello() {
      const hello = 'Hello Duck!';
      console.log(hello);
    }
    
    duckHello(); // 'Hello Duck!'
    console.log(hello); // Error, hello is not defined
    


블둝 μŠ€μ½”ν”„

κ·ΈλŸ¬λ‚˜ {}(블둝) λ‚΄λΆ€μ—μ„œ μ„ μ–Έν•œ varλŠ” 블둝 λ°”κΉ₯μ—μ„œλ„ μœ νš¨ν•˜μ§€λ§Œ,
const와 let은 {} λ‚΄λΆ€μ—μ„œλ§Œ μœ νš¨ν•©λ‹ˆλ‹€.

  • μ˜ˆμ‹œ 1 - ifλ¬Έ var, let
    if (true){
      var var_name = 'var 미더덕';
      let let_name = 'let 미더덕';
    }
    console.log(var_name); // var 미더덕
    console.log(let_name); // ReferenceError: let_name is not defined
    
  • μ˜ˆμ‹œ 2 - {} const
    {
      const const_name = 'const 미더덕';
      console.log(hello); // 'const 미더덕'
    }
    console.log(hello); // Error, const_name is not defined
    
  • μ˜ˆμ‹œ 3 - forλ¬Έ var, let
    for(var var_i=0; var_i<5; var_i++){ }
    console.log(var_i); // 5
    
    for(let let_i = 0; let_i < 5; let_i++){ }
    console.log(let_i); // ReferenceError: let_i is not defined
    




μ°Έκ³ 

https://velog.io/@ksh4820/var-let-const-%EC%B0%A8%EC%9D%B4%EC%A0%90