ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • var μ΄λ•Œ μ“Έ 수 도 μžˆκ² λŠ”λ°?
    πŸ‹ JavaScript 2023. 2. 18. 00:33

    πŸ‹ λ“±μž₯ λ°°κ²½


    λ³€μˆ˜ μ„ μ–Έ 방법에 λŒ€ν•΄ κ³΅λΆ€ν•˜λ‹€ 보면,

    β€œvarλŠ” 무쑰건 μ‚¬μš©ν•˜μ§€ 말고, λ³€ν•˜μ§€ μ•ŠλŠ” 값은 const, λ³€ν•  수 μžˆλŠ” 값은 let을 μ‚¬μš©ν•˜λΌβ€

    이런 말을 λ“£κ²Œ 되고, λ‚˜ μ—­μ‹œ 별 주관없이 μ΄λ ‡κ²Œ λ°›μ•„λ“œλ €μ™”λ‹€.

    머리가 쑰금 더 컀진 μ§€κΈˆ μ‹œμ μ— 생각해보면 κ·Έλž˜λ„ 살짝 좔상화가 된 뢀뢄이 μžˆμ§€ μ•Šλ‚˜ μ‹Άλ‹€.

    πŸ‹ var μ΄λ•Œ μ“Έ μˆ˜λ„ μžˆκ² λŠ”λ°?


    파일 μ‹œμŠ€ν…œ 트리 GUIλ₯Ό λ§Œλ“œλŠ” μ‚¬μ΄λ“œ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν–ˆλ‹€. (μ—¬κΈ°μ„œ λ³Ό 수 μžˆμ–΄μš©)

    개발 도쀑 μ΄λŸ¬ν•œ λ¬Έμ œκ°€ μžˆμ—ˆλ‹€.

    μ»€λ§¨λ“œνƒ€μž…(add, delete, move etc) 별 λ‹€λ₯Έ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ„λ‘ ν•˜λŠ” switch - case ꡬ문을 μ‚¬μš©ν•˜λ˜ 쀑 λ³€μˆ˜ β€˜κ²°κ³Όβ€™ λ™μΌν•œ μŠ€μ½”ν”„μ—μ„œ 이미 μ„ μ–Έλ˜μ—ˆλ‹€λŠ” λ‚΄μš©μ˜ μ—λŸ¬λ₯Ό λ§ˆμ£Όμ³€λ‹€.

    const validateCommand: IValidateCommand = (command, tree) => {
        switch (μ»€λ§¨λ“œνƒ€μž…) {
            case "add":
                const κ²°κ³Ό = μœ νš¨μ„±μ κ²€μ½”λ“œ
            case "delete":
                const κ²°κ³Ό = μœ νš¨μ„±μ κ²€μ½”λ“œ
            case "move":
                const κ²°κ³Ό = μœ νš¨μ„±μ κ²€μ½”λ“œ
            default:
                ...
        }
    } // error: Identifier 'κ²°κ³Ό' has already been declared.

    const, let은 블둝 레벨 μŠ€μ½”ν”„λ₯Ό κ°€μ§„λ‹€. 블둝 레벨 μŠ€μ½”ν”„λŠ” μ€‘κ΄„ν˜Έλ₯Ό κΈ°μ€€μœΌλ‘œ κ·Έ λ²”μœ„κ°€ κ΅¬λΆ„λ˜κΈ°μ— switch -case κ΅¬λ¬Έμ—μ„œ ν•˜μ΄λΌμ΄νŠΈλœ μ•„λž˜ μ˜μ—­μ€ 같은 μŠ€μ½”ν”„λ₯Ό κ³΅μœ ν•˜κ²Œ λœλ‹€.

    switch () **{
        case __:
        case __:
    }**

    사싀 case 문을 λΈ”λ‘μœΌλ‘œ 감싸주어 const 별 λ³„κ°œμ˜ μŠ€μ½”ν”„λ₯Ό λ§Œλ“€μ–΄μ€„ 수 μžˆλŠ” 방법도 μžˆμ§€λ§Œβ€¦

    또 λ‹€λ₯Έ μ°¨μ„ μ±…μœΌλ‘œ ν•¨μˆ˜ λ‹¨μœ„μ˜ μŠ€μ½”ν”„λ₯Ό κ°–λŠ” var둜 λ³€μˆ˜λ₯Ό 선언해쀄 수 도 μžˆλ‹€λŠ” κ²ƒμ΄μ—ˆλ‹€.

    각 μΌ€μ΄μŠ€ λ³„λ‘œ 단 ν•˜λ‚˜μ˜ μ‹€ν–‰λ¬Έλ§Œ μ‹€ν–‰λ˜κΈ°μ— μ„œλ‘œμ˜ μΌ€μ΄μŠ€ λ‚΄ var κ²°κ³Ό λ³€μˆ˜κ°€ μ„œλ‘œμ— 영ν–₯을 μ£Όμ§€ μ•ŠλŠ”λ‹€λŠ” μ μ—μ„œ μ‚¬μš©ν•  수 μžˆμ—ˆλ‹€.

    switch () {
        case __: 
            var κ²°κ³Ό
        case __: 
            var κ²°κ³Ό
    }

    λ¬Όλ‘  var으둜 μ„ μ–Έν•œ λ³€μˆ˜λŠ” ν•¨μˆ˜ μŠ€μ½”ν”„ λ‚΄ μ–Έμ œλ“  변경이 κ°€λŠ₯ν•˜κΈ°μ—, λ‹€λ₯Έ κ΅¬λ¬Έμ—μ„œλŠ” μ—…λ°μ΄νŠΈ 좔적이 μ–΄λ €μ›Œμ§ˆ 수 μžˆλ‹€λŠ” 단점은 μžˆκ² μ§€λ§Œ, 이 경우처럼 switch-case κ΅¬λ¬Έμ—μ„œλŠ” μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€λŠ” 생각을 ν–ˆλ‹€.

    ν•˜μ§€λ§Œβ€¦ const, let은 var의 κ°œμ„ μ•ˆμœΌλ‘œ λ“±μž₯ν–ˆκΈ°μ— κ°œμ„ ν•˜λŠ” 뢀뢄을 λͺ…ν™•νžˆ 짚고 λ„˜μ–΄κ°€λ©΄ μ’‹λ‹€. ν•œλ²ˆ μ‚΄νŽ΄λ³΄μž.

    πŸ‹ κΈ°μ‘΄ var의 문제


    • 문제 1. var λ³€μˆ˜λŠ” μ–Έμ œλ‚˜ λ³€κ²½ κ°€λŠ₯ν•˜μ—¬ 이전엔 λͺ…λͺ… κ·œμΉ™μ„ λŒ€λ¬Έμž || _μ–Έλ”μŠ€μ½”μ–΄λ‘œλ§Œ μ œν•œν•˜μ˜€μŒ

    • 문제 2. var λ³€μˆ˜λŠ” 같은 λ³€μˆ˜ μž¬μ„ μ–Έμ„ ν—ˆμš©ν•¨.

    • 값이 λ³€κ²½λ˜μ—ˆμ„ λ•Œ μ–΄λ””μ„œ λ³€κ²½λ˜μ—ˆλŠ”μ§€ 좔적이 μ–΄λ €μ›Œμ§.

    • 문제 3. var λ³€μˆ˜λŠ” ν•¨μˆ˜ λ‹¨μœ„μ˜ μŠ€μ½”ν”„λ₯Ό κ°–μŒ. 블둝 μ™ΈλΆ€μ—μ„œ if/for λ¬Έ 블둝 μ™ΈλΆ€μ—μ„œλ„ var λ³€μˆ˜ λ³€μˆ˜ μ ‘κ·Ό κ°€λŠ₯

      function welcome(name){ 
      if (!name){ 
          var errMsg = "no name error!" 
      
      } 
      console.log(name); 
      console.log(errMsg); // "no name error!". 
      //ν•¨μˆ˜ λ‹¨μœ„μ˜ μŠ€μ½”ν”„λ₯Ό κ°€μ Έ if 블둝 μ™ΈλΆ€μ—μ„œμ—μ„œλ„ λ³€μˆ˜ μ ‘κ·Ό κ°€λŠ₯ 
      } welcome();
    • 문제 4. λ³€μˆ˜ μ„ μ–Έ 전에 λ³€μˆ˜μ˜ μ‚¬μš©μ΄ κ°€λŠ₯ν•œ ν˜Έμ΄μŠ€νŒ…* λ°œμƒ

      console.log(foo); // undefined 
      var foo; 
      console.log(bar); // Error: Uncaught ReferenceError: 

    (*ν˜Έμ΄μŠ€νŒ…? λ³€μˆ˜, ν•¨μˆ˜ λ“± 선언문을 μ΅œμƒλ‹¨μ˜ μŠ€μ½”ν”„λ‘œ λŒμ–΄μ˜¬λ € λ©”λͺ¨λ¦¬λ₯Ό λ¨Όμ € ν• λ‹Ήν•˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ λ‚΄λΆ€ ν˜„μƒ. λ•Œλ¬Έμ— var둜 μ„ μ–Έλœ λͺ¨λ“  λ³€μˆ˜λŠ” μŠ€μ½”ν”„ μ„ λ‘μ—μ„œ μ„ μ–Έκ³Ό μ΄ˆκΈ°ν™” 단계가 ν•œλ²ˆμ— μ΄λ£¨μ–΄μ Έμ„œ λ³€μˆ˜ μ„ μ–Έλ¬Έ 이전에 λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  수 있게됨.)

    πŸ‹ μ–΄λ–»κ²Œ ν•΄κ²°ν–ˆλ‚˜μš”?


    ν•΄κ²°: let, const

    let으둜 μ„ μ–Έλœ λ³€μˆ˜λŠ” 블둝 레벨 ({})의 μŠ€μ½”ν”„λ₯Ό κ°€μ§€λ©° λ³€μˆ˜μ˜ μ„ μ–ΈκΉŒμ§€ μΌμ‹œμ  μ‚¬κ°μ§€λŒ€ (Temporary Dead Zone)μ΄λΌλŠ”λ°λ‘œ λΉ μ Έμ„œ λ³€μˆ˜κ°€ μ„ μ–Έλ¬Έ 이전에 λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  수 μ—†κ²Œλ©λ‹ˆλ‹€.

    function welcome(name){
        if (!name){
            let errMsg = "no name error!" // 블둝 μ™ΈλΆ€μ—μ„œ μ ‘κ·Ό λΆˆκ°€ 
        }
        console.log(name);
        console.log(errMsg); // Err: errMsg is not defined
    }
    
    welcome();

    πŸ‹ ν•œμ€„ μš”μ•½


    λ³€μˆ˜μ˜ μ„ μ–Έμ—λŠ” 기본적으둜 const μ‚¬μš©, μž¬ν• λ‹Ήμ΄ ν•„μš”ν•œ κ²½μš°μ—λŠ” let을 μ‚¬μš©ν•˜μžμ—λŠ” 변함이 없닀…

    const, let λŒ€μ‹  var을 μ¨μ•Όλ§Œ 얻을 수 μžˆλŠ” νš¨κ³Όμ— λŒ€ν•œ 섀득이 λΆ€μ‘±ν•˜κΈ° λ•Œλ¬Έβ€¦

Designed by Tistory.