πŸ”₯ [UIUX] 0120 JAVASCRIPT Coding, μ½”λ”© μ΄ˆκΈ‰ 11

You_Jin.Β·2025λ…„ 1μ›” 22일
2
post-thumbnail

✏️ 2025. 1μ›” 20일 / javascript μ΄ˆκΈ‰ 11

πŸ‘» ν•¨μˆ˜(function)
데이터λ₯Ό μ €μž₯ν•  λ•Œμ—λŠ” 'λ³€μˆ˜'λ₯Ό μ‚¬μš©ν•œλ‹€. λ³€μˆ˜μ—λŠ” 데이터λ₯Ό μ €μž₯만 ν•  수 있고 μ½”λ“œλŠ” μ €μž₯ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
ν•˜μ§€λ§Œ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ μ½”λ“œλ₯Ό λ©”λͺ¨λ¦¬μ— μ €μž₯ν–ˆλ‹€κ°€ ν•„μš”ν•  λ•Œ λ§ˆλ‹€ ν˜ΈμΆœν•˜μ—¬ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
즉, μ½”λ“œλ₯Ό μ €μž₯ν•˜κ³  μž¬μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
ν•¨μˆ˜λŠ” ν”„λ‘œκ·Έλž˜λ° μ½”λ“œλ₯Ό μ €μž₯ν•˜λŠ” 곡간이라고 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μžλ°”μŠ€ν¬λ¦½νŠΈ 해석기가 ν•¨μˆ˜λ₯Ό λ§Œλ‚˜λ©΄ ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό λ©”λͺ¨λ¦¬ 곡간에 'κΈ°μ–΅'을 ν•©λ‹ˆλ‹€.
즉, ν•¨μˆ˜λ₯Ό λ§Œλ‚˜λŠ” μˆœκ°„ μ‹€ν–‰ν•˜μ§€ μ•Šκ³  κΈ°μ–΅λ§Œ 해두닀가, ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜κ²Œ 되면 κ·Έ μ‹œμ μ— ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.

   [κΈ°λ³Έν˜•]
   1. 일반 ν•¨μˆ˜ μ •μ˜λ¬Έ <- λ¬Έμž₯
  --------------------
   function ν•¨μˆ˜λͺ…(){μ‹€ν–‰μ‹œν‚¬ μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œ;}
   ν•¨μˆ˜λͺ…(); -> μΌλ°˜ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” 호좜문. ν•΄λ‹Ή μ€„μ—μ„œ ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.
   2. ν•¨μˆ˜ ν‘œν˜„μ‹(읡λͺ… ν•¨μˆ˜) <- 연산식
  --------------------
   var μ°Έμ‘°λ³€μˆ˜ = function(){μ‹€ν–‰μ‹œν‚¬ μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œ;}
   λ³€μˆ˜λͺ…(); -> 읡λͺ…ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” 호좜문. ν•΄λ‹Ή μ€„μ—μ„œ ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.

πŸ‘€ ν•¨μˆ˜μ™€ λ³€μˆ˜μ˜ 차이점

   λ³€μˆ˜
   - 1개의 λ°μ΄ν„°λ§Œ μ €μž₯ κ°€λŠ₯ν•©λ‹ˆλ‹€.
   - var λ˜λŠ” let, const와 같은 ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
   - λ¬Έμžν˜•, μˆ«μžν˜•, λ…Όλ¦¬ν˜•κ³Ό 같은 데이터λ₯Ό μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
   - 객체λ₯Ό μ°Έμ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
   ν•¨μˆ˜
   - μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œλ₯Ό μ €μž₯ν•œλ‹€.
   - functionμ΄λΌλŠ” ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„ μ–Έν•œλ‹€.
   - 좜λ ₯λ¬Έ, μ œμ–΄λ¬Έ λ“±μ˜ μ½”λ“œλ₯Ό μ €μž₯ν•  수 있고, μ½”λ“œκ°€ μ‹€ν–‰λœ 결괏값을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

πŸ‘€ ν•¨μˆ˜μ˜ ν˜Έμ΄μŠ€νŒ…
ν˜Έμ΄μŠ€νŒ…μ˜ 사전적인 의미둜 'λŒμ–΄μ˜¬λ¦¬λ‹€'λΌλŠ” 뜻이 μžˆμŠ΅λ‹ˆλ‹€.
일반 ν•¨μˆ˜ μ •μ˜λ¬Έμ˜ 경우 ν•¨μˆ˜ 호좜 μ‹œ ν˜Έμ΄μŠ€νŒ…(hoisting)κΈ°μˆ μ„ μ§€μ›ν•©λ‹ˆλ‹€.
ν˜Έμ΄μŠ€νŒ…μ΄λž€ ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μ΅œμƒλ‹¨μœ„μΉ˜λ‘œ λŒμ–΄μ˜¬λ €μ„œ κΈ°μ–΅ν•˜λŠ” 것을 λ§ν•©λ‹ˆλ‹€.
ν˜Έμ΄μŠ€νŒ…μ„ μ μš©ν•˜λ©΄ ν•¨μˆ˜μ •μ˜λ¬Έλ³΄λ‹€ 호좜문이 λ¨Όμ €λ‚˜μ™€λ„ ν•¨μˆ˜μ •μ˜λ¬Έμ„ λŒμ–΄μ˜¬λ € ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.
ν•˜μ§€λ§Œ 읡λͺ…ν•¨μˆ˜λŠ” ν˜Έμ΄μŠ€νŒ…κΈ°μˆ μ„ μ§€μ›ν•˜μ§€μ•ŠμŠ΅λ‹ˆλ‹€.
λ”°λΌμ„œ λ°˜λ“œμ‹œ ν•¨μˆ˜κ°€ λ¨Όμ € λ“±μž₯ν•œ 이후에 ν˜ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ‘€ μ§€κΈˆκΉŒμ§€μ˜ λ‚΄μš©μ„ μ‹€μ œλ‘œ μž‘μ„±ν•΄λ΄…μ‹œλ‹€!

      //ν•¨μˆ˜ 호좜 <- ν˜Έμ΄μŠ€νŒ… o (μΌλ°˜ν•¨μˆ˜λΌμ„œ ν•¨μˆ˜λΆ€ν„° λΆˆλŸ¬λ„ ν•¨μˆ˜μ •μ˜λ¬Έμ„ λ¨Όμ € 인식(ν˜Έμ΄μŠ€νŒ…)ν•˜κ³  좜λ ₯)
      myFnc();
      //μΌλ°˜ν•¨μˆ˜ (ν•¨μˆ˜λͺ…에 이름을 λΆ€μ—¬ν–ˆμœΌλ‹ˆκΉ) - ν•¨μˆ˜ν˜ΈμΆœλ¬Έλ³΄λ‹€ μ•„λž˜μ— μžˆμ–΄λ„ μ •μƒμž‘λ™ν•œλ‹€.
      function myFnc() {
        count++;
        document.write("hello" + count, "<br/>");
      }
      //ν•¨μˆ˜ 호좜
      myFnc();
      document.write("--------------ꡬ뢄선--------------", "<br/>");
      // theFnc(); <- ν˜Έμ΄μŠ€νŒ… x (ν•¨μˆ˜μ •μ˜λ₯Ό 먼저해야함_μ—¬κΈ°λΆ€ν„° 였λ₯˜λ°œμƒν•΄μ„œ μ•„λž˜ theFnc μ „λΆ€ μ‹€ν–‰x)
      //읡λͺ…ν•¨μˆ˜ (function 뒀에 이름이 μžˆλƒ/없냐) - 읡λͺ…ν•¨μˆ˜λŠ” ν•¨μˆ˜κ°€ μ„ μ–Έλœ μ΄ν›„μ—λ§Œ ν˜ΈμΆœν•  수 μžˆλ‹€.
      var theFnc = function () {
        count++;
        document.write("bye" + count, "<br/>");
      };
      //ν•¨μˆ˜ 호좜
      theFnc();
      //ν•¨μˆ˜κ°€ 없을 경우 두 수λ₯Ό λ”ν•˜λŠ” 식 λ§Œλ“€κΈ°
      var num1 = 10;
      var num2 = 3;
      var result = num1 + num2;
      document.write(result, "<br/>");
      //μœ„ 식을 ν•¨μˆ˜λ‘œ μ €μž₯ν•˜μ—¬ ν˜ΈμΆœν•˜κΈ°
      function addNum() {
        var num1 = 10;
        var num2 = 3;
        var result = num1 + num2;
        document.write(result, "<br/>");
      }
      //ν•¨μˆ˜ν˜ΈμΆœλ¬Έμ„ μ΄μš©ν•˜μ—¬ μ›ν•˜λŠ” 횟수만큼 ν•¨μˆ˜ μ‹€ν–‰ν•˜κΈ°
      addNum();
      addNum();
      addNum();
      addNum();

🌼 varλ₯Ό μ΄μš©ν•œ λ³€μˆ˜μ˜ νŠΉμ§•
μžλ°”μŠ€ν¬λ¦½νŠΈ ES6λ²„μ „μ—μ„œλŠ” λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κΈ° μœ„ν•΄ letκ³Ό constλΌλŠ” μƒˆλ‘œμš΄ μ˜ˆμ•½μ–΄κ°€ μƒκ²ΌμŠ΅λ‹ˆλ‹€.
var와 let, constλŠ” ν˜Έμ΄μŠ€νŒ…κΈ°μˆ κ³Ό μŠ€μ½”ν”„μ— 큰 차이가 μžˆμŠ΅λ‹ˆλ‹€.
🌷 λ³€μˆ˜μ˜ μ μš©λ²”μœ„ 'μŠ€μ½”ν”„' μ•Œμ•„λ³΄κΈ°
μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κ³  μ‚¬μš©ν•  λ•Œ λ³€μˆ˜κ°€ μ μš©λ˜λŠ” μœ νš¨λ²”μœ„λ₯Ό 'μŠ€μ½”ν”„(scope)'라고 ν•©λ‹ˆλ‹€.
즉, λ³€μˆ˜κ°€ μ–΄λ””κΉŒμ§€ μœ νš¨ν•œ μ§€ κ°€λ¦¬ν‚€λŠ” λ²”μœ„λ₯Ό λ§ν•©λ‹ˆλ‹€.
μžλ°”μŠ€ν¬λ¦½νŠΈ ν•¨μˆ˜μ—μ„œ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  λ•Œ μ—λŠ” 이 μ˜μ—­μ— μ£Όμ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.
ν•œ ν•¨μˆ˜μ•ˆμ—μ„œλ§Œ μ‚¬μš©ν•˜κ³  λ‹€λ₯Έ ν•¨μˆ˜μ—μ„œλŠ” μ‚¬μš©ν•  수 μ—†λŠ” λ³€μˆ˜κ°€ μžˆλŠ”κ°€ν•˜λ©΄,
μ–΄λŠ ν•¨μˆ˜μ—μ„œλ‚˜ λ‹€ μ‚¬μš©ν•  수 μžˆλŠ” λ³€μˆ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€.
ν•œ ν•¨μˆ˜μ•ˆμ—μ„œλ§Œ μ‚¬μš©ν•  수 μžˆλŠ” λ³€μˆ˜λ₯Ό 'μ§€μ—­λ³€μˆ˜' λ˜λŠ” 'λ‘œμ»¬λ³€μˆ˜'라고 λΆ€λ₯΄κ³ ,
μ–΄λŠ ν•¨μˆ˜μ—μ„œλ‚˜ λ‹€ μ‚¬μš©ν•  수 μžˆλŠ” λ³€μˆ˜λ₯Ό 'μ „μ—­λ³€μˆ˜' λ˜λŠ” 'κΈ€λ‘œλ²Œλ³€μˆ˜'라고 λΆ€λ¦…λ‹ˆλ‹€.
μ§€μ—­λ³€μˆ˜λŠ” {}μ•ˆμ—μ„œλ§Œ μœ νš¨ν•©λ‹ˆλ‹€. 이런 μŠ€μ½”ν”„(μœ νš¨λ²”μœ„)λ₯Ό 'λΈ”λ‘λ ˆλ²¨'의 μŠ€μ½”ν”„λΌκ³ ν•˜κ³ ,
μ „μ—­λ³€μˆ˜λŠ” 'ν•¨μˆ˜λ ˆλ²¨μ˜ μŠ€μ½”ν”„'λ₯Ό 가진닀라고 ν‘œν˜„ν•©λ‹ˆλ‹€.
🌷 ν•¨μˆ˜ μ•ˆμ—μ„œλ§Œ μ“Έ 수 μžˆλŠ” μ§€μ—­λ³€μˆ˜
μ§€μ—­λ³€μˆ˜λŠ” ν•¨μˆ˜ μ•ˆμ—μ„œ μ„ μ–Έν•˜κ³ , ν•¨μˆ˜ μ•ˆμ—μ„œλ§Œ μ‚¬μš©ν•©λ‹ˆλ‹€.
μ§€μ—­λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λ €λ©΄ μ˜ˆμ•½μ–΄ var와 ν•¨κ»˜ λ³€μˆ˜ 이름을 μ§€μ •ν•©λ‹ˆλ‹€.
μ§€μ—­λ³€μˆ˜λŠ” ν•΄λ‹Ή ν•¨μˆ˜μ˜ λ°”κΉ₯μœΌλ‘œλŠ” λ‚˜μ˜¬ 수 μ—†μŠ΅λ‹ˆλ‹€.
μ•„λž˜ 예제처럼 ν•¨μˆ˜ μ•ˆμ—μ„œ μ„ μ–Έλœ λ³€μˆ˜λ₯Ό ν•¨μˆ˜ λ°–μ—μ„œ 좜λ ₯ν•˜λ €κ³ ν•˜λ©΄ μœ νš¨λ²”μœ„λ₯Ό λ²—μ–΄λ‚˜μ„œ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.
🌷 μŠ€ν¬λ¦½νŠΈμ—μ„œ 자유둭게 μ“Έ 수 μžˆλŠ” μ „μ—­λ³€μˆ˜
μ „μ—­λ³€μˆ˜λŠ” 적용 λ²”μœ„λ₯Ό μ œν•œν•˜μ§€μ•Šκ³  μ“Έ 수 μžˆμŠ΅λ‹ˆλ‹€.
즉, μ „μ—­λ³€μˆ˜λŠ” μ§€μ—­λ³€μˆ˜μ™€ 달리 슀크립트 μ†ŒμŠ€ μ „μ²΄μ—μ„œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μ „μ—­λ³€μˆ˜λ‘œ μ‚¬μš©ν•˜λ €λ©΄ ν•¨μˆ˜ λ°–μ—μ„œ μ„ μ–Έν•˜κ±°λ‚˜, ν•¨μˆ˜μ•ˆμ—μ„œ varλΌλŠ” ν‚€μ›Œλ“œ 없이 μ„ μ–Έν•΄μ•Όν•©λ‹ˆλ‹€.
ν•¨μˆ˜μ•ˆμ—μ„œ μ„ μ–Έν•˜λ”λΌλ„ varλΌλŠ” μ˜ˆμ•½μ–΄κ°€ μ—†μœΌλ©΄ μ „μ—­λ³€μˆ˜λ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.
μ „μ—­λ³€μˆ˜λŠ” ν•¨μˆ˜ μ•ˆνŒŽμœΌλ‘œ μ‚¬μš©ν•  수 있음 + κ·Έ λ³€μˆ˜λͺ…을 λ‚˜ 말고 λ‹€λ₯Έ κ°œλ°œμžκ°€ μ“Έ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

🌻 μ§€κΈˆκΉŒμ§€μ˜ λ‚΄μš©μ„ μ‹€μ œλ‘œ μž‘μ„±ν•΄λ΄…μ‹œλ‹€!

      var num1 = 30; // μ „μ—­λ³€μˆ˜(ν•¨μˆ˜ λ°”κΉ₯에 μžˆμœΌλ―€λ‘œ)
      function addNum() {
        var sum = 10 + 20; //μ§€μ—­λ³€μˆ˜. λ³€μˆ˜ sum의 μ μš©λ²”μœ„λŠ” addNum이닀.
        //ν•¨μˆ˜ μ•ˆμ—μ„œ sum의 값을 μ½˜μ†”μ°½μ— 좜λ ₯ν•˜λΌκ³ ν–ˆμœΌλ―€λ‘œ, μœ νš¨λ²”μœ„ μ•ˆμ— μžˆμ–΄ μ •μƒμ μœΌλ‘œ 30μ΄λΌλŠ” 값을 보여쀀닀.
        console.log("ν•¨μˆ˜μ•ˆμ—μžˆλŠ” μ§€μ—­λ³€μˆ˜ sum : " + sum); //30
        //μ „μ—­λ³€μˆ˜(ν•¨μˆ˜ μ•ˆμ—μžˆμ§€λ§Œ, varκ°€ μ—†μœΌλ―€λ‘œ)
        result = 100 + 200;
        result2 = sum + num1;
      }
      addNum();
      //λͺ¨λ‘ μ „μ—­λ³€μˆ˜μ΄λ―€λ‘œ 정상싀행
      console.log("μ „μ—­λ³€μˆ˜ result : " + result); //300 / resultλŠ” function addNum()μ•ˆμ—μ„œ μ •μ˜ν•œκ±΄λ°, var μ—†λ‹€κ³  λ°–μ—μ„œ 좜λ ₯해도 좜λ ₯됨.
      console.log("μ „μ—­λ³€μˆ˜ result2 : " + result2);
      // "Uncaught ReferenceError: sum is not defined" -> λ³€μˆ˜ sum은 μ •μ˜λœμ μ΄ μ—†λ‹€λŠ” 였λ₯˜
      //console.log(sum); //μ§€μ—­λ³€μˆ˜ var sum이 μœ νš¨λ²”μœ„λ₯Ό 벗어났기 λ•Œλ¬Έμ— μ½˜μ†”μ°½μ— 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

🌈 var의 ν˜Έμ΄μŠ€νŒ…
μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  λ•Œ 쑰심해야 ν•  κ°œλ…μ΄ μžˆμŠ΅λ‹ˆλ‹€.
λ°”λ‘œ ν˜Έμ΄μŠ€νŒ…(hoisting)μž…λ‹ˆλ‹€.
ν˜Έμ΄μŠ€νŒ…μ΄λž‘ 'λŒμ–΄μ˜¬λ¦°λ‹€'λΌλŠ” 뜻으둜 상황에 따라 λ³€μˆ˜μ˜ μ„ μ–Έ(var λ³€μˆ˜λͺ…)κ³Ό ν• λ‹Ή(λ³€μˆ˜μ— 값을 λ„£λŠ” 것)을 λΆ„λ¦¬ν•˜μ—¬,
μ„ μ–Έ 뢀뢄을 μŠ€μ½”ν”„μ— κ°€μž₯ μœ—μͺ½μœΌλ‘œ λŒμ–΄μ˜¬λ¦¬λŠ” 것을 λ§ν•©λ‹ˆλ‹€.
λŒμ–΄μ˜¬λ¦°λ‹€κ³ ν•΄μ„œ μ‹€μ œ μ†ŒμŠ€μ½”λ“œλ₯Ό λŒμ–΄μ˜¬λ¦¬λŠ” 것은 μ•„λ‹ˆκ³ ,
μ†ŒμŠ€λ₯Ό 그런 λ°©μ‹μœΌλ‘œ ν•΄μ„ν•œλ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€.
πŸŒ‚ λ³€μˆ˜μ˜ μž¬μ„ μ–Έκ³Ό μž¬ν• λ‹Ή
varλ₯Ό μ΄μš©ν•œ λ³€μˆ˜λŠ” ν˜Έμ΄μŠ€νŒ… 이외에도 'μž¬μ„ μ–Έ'κ³Ό 'μž¬ν• λ‹Ή'을 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μž¬μ„ μ–Έμ΄λž€ var ν‚€μ›Œλ“œλ₯Ό μ•žμ— λΆ™μ—¬μ„œ μ—¬λŸ¬ 번 λ™μΌν•œ 이름을 μ“°λŠ” 것을 μž¬μ„ μ–Έμ΄λΌκ³  ν•©λ‹ˆλ‹€.
즉 var i = 0; 이후에 var i; μ΄λŸ°μ‹μœΌλ‘œ λ™μΌν•œ 이름을 varλ₯Ό λΆ™μ—¬ μ—¬λŸ¬ 번 μ„ μ–Έν•˜λŠ” 것을 λ§ν•©λ‹ˆλ‹€.
μž¬μ„ μ–Έμ„ν•˜λ©΄ 이전에 λ§Œλ“€μ—ˆλ˜ λ³€μˆ˜λŠ” μ‚¬λΌμ§‘λ‹ˆλ‹€.
μž¬ν• λ‹Ήμ΄λž€ λ³€μˆ˜μ— 값을 λ‹€μ‹œ μƒˆλ‘œ λ„£λŠ” 것을 λ§ν•©λ‹ˆλ‹€.
즉, var i = 0; 이후에 i = 10;처럼 값을 μƒˆλ‘œ ν• λ‹Ήν•˜λŠ” 것을 λ§ν•©λ‹ˆλ‹€.
μž¬ν• λ‹Ήμ„ ν•˜λ©΄ 이전에 있던 값은 μ‚¬λΌμ§‘λ‹ˆλ‹€.

      /* ν˜Έμ΄μŠ€νŒ… */
      var x = 10; //μ „μ—­λ³€μˆ˜(ν•¨μˆ˜ λ°”κΉ₯)
      // function displayNumber() μ•ˆμ—μžˆλŠ” var y = 20; 은 μ½˜μ†”y보닀 μœ—μͺ½μ— var y; λž‘ κ°™μŒ (κ·Έλž˜μ„œ 좜λ ₯ν–ˆμ„ λ•Œ undefinedλ‚˜μ˜΄)
      function displayNumber() {
        //var y; ν˜Έμ΄μŠ€νŒ…μ— μ˜ν•΄ yκ°€ μ„ μ–Έλœ κ²ƒμœΌλ‘œ 취급함.
        console.log("xλŠ” : " + x); //10
        console.log("yλŠ” : " + y); //yμ„ μ–Έν•œμ μ—†λ‹€κ³  였λ₯˜λ‚˜μ•Όν•˜μ§€λ§Œ, ν˜Έμ΄μŠ€νŒ…λ•Œλ¬Έμ— μœ„λ‘œ μ˜¬λΌκ°€μ„œ yκ°’ μžˆλ‹€κ³  생각 △아직 κ°’ μ •ν•œμ μ—†μ–΄μ„œ undefined
        //y의 ν˜Έμ΄μŠ€νŒ…μ΄ 일어남. 값이 λ‚˜μ€‘μ— ν• λ‹Ήλœ κ²ƒμœΌλ‘œ 취급함.
        var y = 20; //var λŒ€μ‹  let으둜 λ°”κΎΈλ©΄ 였λ₯˜ - let은 ν˜Έμ΄μŠ€νŒ…x
      }
      displayNumber(); //ν•¨μˆ˜ν˜ΈμΆœ
      /* μž¬μ„ μ–Έκ³Ό μž¬ν• λ‹Ή */
      function addNum(num1, num2) {
        //λ§€κ°œλ³€μˆ˜ num1,2
        return num1 + num2;
      }
      var sum = addNum(10, 20);
      console.log(sum); //30
      sum = 50;
      console.log(sum); //50 <- λ°”λ‘œ μœ—μ€„μ—μ„œ sum=50이라고 값을 'μž¬ν• λ‹Ή'함
      var sum = 100; //λ³€μˆ˜λ₯Ό λ‹€μ‹œ 선언함(μž¬μ„ μ–Έ)
      console.log(sum);

✨ let과 const
varμ˜ˆμ•½μ–΄λ₯Ό μ‚¬μš©ν•˜λŠ” λ³€μˆ˜λŠ” ν•¨μˆ˜μ˜μ—­μ˜ μŠ€μ½”ν”„(μ „μ—­)을 κ°€μ§€κ³ , μž¬ν• λ‹Ήκ³Ό μž¬μ„ μ–Έμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
κ·Έλž˜μ„œ varμ˜ˆμ•½μ–΄λ₯Ό 잘λͺ» μ‚¬μš©ν•˜λ©΄ μ˜ˆμƒν•˜μ§€ λͺ»ν•œ ν”„λ‘œκ·Έλž˜λ° 였λ₯˜κ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.
κ·Έλž˜μ„œ ES6λ²„μ „λΆ€ν„°λŠ” varλ₯Ό λ³΄μ™„ν•œ letκ³Ό constλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
🎈 let을 μ΄μš©ν•œ λ³€μˆ˜μ˜ νŠΉμ§•
ES6 μ΄μ „μ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ ν”„λ‘œκ·Έλž¨μ—μ„œλŠ” varμ˜ˆμ•½μ–΄λ‘œλ§Œ λ³€μˆ˜λ₯Ό μ„ μ–Έν–ˆμŠ΅λ‹ˆλ‹€.
varμ˜ˆμ•½μ–΄λ₯Ό 빠뜨리면 μ˜λ„ν•˜μ§€ μ•Šκ²Œ μ „μ—­λ³€μˆ˜κ°€ λ˜κΈ°λ„ ν•˜κ³ ,
ν”„λ‘œκ·Έλž¨ 길이가 길어지닀보면 μ‹€μˆ˜λ‘œ μ‚¬μš©ν•˜λŠ” λ³€μˆ˜λ₯Ό μž¬μ„ μ–Έν•˜κ±°λ‚˜, 값을 μž¬ν• λ‹Ή ν•΄λ²„λ¦¬λŠ” κ²½μš°κ°€ 생기기도 ν•©λ‹ˆλ‹€.
κ·Έλž˜μ„œ ES6λ²„μ „λΆ€ν„°λŠ” letκ³Ό constκ°€ μΆ”κ°€λ˜μ—ˆκ³ , λ˜λ„λ‘μ΄λ©΄ varμ˜ˆμ•½μ–΄λŠ” μ‚¬μš©ν•˜μ§€μ•ŠλŠ”κ²ƒμ„ ꢌμž₯ν•©λ‹ˆλ‹€.
var와 let,const의 κ°€μž₯ 큰 μ°¨μ΄λŠ” μŠ€μ½”ν”„ λ²”μœ„μž…λ‹ˆλ‹€.
varλŠ” ν•¨μˆ˜μ˜μ—­(레벨)의 μŠ€μ½”ν”„λ₯Ό κ°€μ§€μ§€λ§Œ letκ³Ό constλŠ” λΈ”λ‘μ˜μ—­μ˜ μŠ€μ½”ν”„λ₯Ό κ°€μ§‘λ‹ˆλ‹€.
🎈 λΈ”λ‘μ•ˆμ—μ„œλ§Œ μ‚¬μš©ν•  수 μžˆλŠ” λ³€μˆ˜
letμ˜ˆμ•½μ–΄λ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” λ³€μˆ˜λ₯Ό μ„ μ–Έν•œ 블둝({}둜 묢은 λΆ€λΆ„)μ—μ„œλ§Œ μœ νš¨ν•˜κ³ ,
블둝을 λ²—μ–΄λ‚˜λ©΄ μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.ν•¨μˆ˜λ°–μ—μ„œ μ„ μ–Έν•˜λ©΄ μ „μ—­ν•¨μˆ˜λ‘œ μ‚¬μš©κ°€λŠ₯)
letμ˜ˆμ•½μ–΄λ₯Ό μ‚¬μš©ν•œ λ³€μˆ˜λŠ” 'μž¬ν• λ‹Ήμ€ κ°€λŠ₯ν•˜μ§€λ§Œ, μž¬μ„ μ–Έμ€ λΆˆκ°€ν•©λ‹ˆλ‹€.'
varμ˜ˆμ•½μ–΄λ₯Ό μ‚¬μš©ν•œ λ³€μˆ˜λŠ” μ„ μ–Έν•˜κΈ° 이전에 μ‹€ν–‰ν•˜λ”λΌλ„ ν˜Έμ΄μŠ€νŒ…λ•Œλ¬Έμ—,
아직 ν• λ‹Ήλ˜μ§€ μ•Šμ•˜μŒμ„ μ˜λ―Έν•˜λŠ” 'undefined'값을 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.
ν•˜μ§€λ§Œ letμ˜ˆμ•½μ–΄λ₯Ό μ‚¬μš©ν•œ λ³€μˆ˜λŠ” μ„ μ–Έν•˜κΈ° 전에 μ‚¬μš©ν•  경우 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚΅λ‹ˆλ‹€.
ReferenceErrorμ—μ„œ Cannot access 'y' before initialization at displayNumber 였λ₯˜λŠ”
displayNumberλΌλŠ” ν•¨μˆ˜μ—μ„œ λ³€μˆ˜ yκ°€ μ„ μ–Έλ˜μ§€μ•Šμ•˜κ³ , μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šμ•„ μ‚¬μš©ν•  수 μ—†μŒμ„ μ•Œλ €μ€λ‹ˆλ‹€.

   [μ—λŸ¬μ’…λ₯˜] -μ½˜μ†”μ°½μ—μ„œ 확인가λŠ₯
   - ReferenceError : μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  λ•Œ λ°œμƒν•˜λŠ” μ—λŸ¬
   - SyntaxError : λ¬Έμžμ—΄μ— λ”°μ˜΄ν‘œλ‚˜ κΈ°ν˜Έκ°€ 잘λͺ»λμ„ λ•Œ λ°œμƒν•˜λŠ” μ—λŸ¬. 문법 μ—λŸ¬
   - TypeError : μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진이 μŠ€μ½”ν”„κ²€μƒ‰μ€ μ„±κ³΅ν–ˆμ§€λ§Œ, 
     ν•΄λ‹Ή λŒ€μƒμ΄λ‚˜ 결괏값에 μ ν•©ν•˜μ§€ μ•Šκ±°λ‚˜ λΆˆκ°€λŠ₯ν•œ μ‹œλ„λ₯Ό ν•  경우 λ°œμƒν•˜λŠ” μ—λŸ¬ (ex. true + 10 을 싀행해라 / 호좜 잘λͺ»ν–ˆμ„ λ•Œ)
      //calcNum();
      function calcNum() {
        let sum = 0; // let sum의 μœ νš¨λ²”μœ„ -> function calcNum() ν•¨μˆ˜ 전체
        // function calcNumμ•ˆμ— for문이 μžˆμ–΄μ„œ let sum은 forλ¬Έ μ•ˆμ—μ„œλ„ μœ νš¨ν•¨
        // let i의 μœ νš¨λ²”μœ„ -> forλ¬Έ
        for (let i = 1; i <= 10; i++) {
          // sum의 μœ νš¨λ²”μœ„λŠ” ν•¨μˆ˜μ „μ²΄μ΄λ―€λ‘œ forλ¬Έμ•ˆμœΌλ‘œ λ“€μ–΄μ˜¬ 수 있음.
          sum += i; // sum = sum + i
        }
        console.log("sum은 : " + sum);
        //console.log("iλŠ” : " + i); <- let iλŠ” forλ¬Έμ—μ„œλ§Œ μœ νš¨ν•¨ / 'Uncaught Reference Error: i is not defined'
        sum = 100; //μž¬ν• λ‹Ή
        console.log("μž¬ν• λ‹Ή : " + sum);
        /* Uncaught SyntaxError: Identifier 'sum' has already been declared (at var_let_const03.html:54:13)
        -> sumμ΄λΌλŠ” λ³€μˆ˜λŠ” 이전에 μ„ μ–Έλ˜μ—ˆκΈ° λ•Œλ¬Έμ— μž¬μ„ μ–Έλ  수 μ—†λ‹€. */
        //let sum = 100; //μž¬μ„ μ–ΈX
      }
      //ν˜Έμ΄μŠ€νŒ…
      var x = 10;
      function displayNumber() {
        console.log("xλŠ” : " + x);
        // Uncaught ReferenceError: Cannot access 'y' before initialization at displayNumber ~. (yμ„ μ–Έλœμ μ—†μŒ) <- μ½˜μ†”μ°½ 눌러보면 μ–΄λ””μ„œμ˜€λ₯˜λ‚¬λŠ”μ§€ μ•Œλ €μ€Œ
        //yλ₯Ό λ¨Όμ € μ„ μ–Έν•˜κ³  μ΄ˆκΈ°ν™”ν•˜κΈ° μ „μ—λŠ” ν•΄λ‹Ή λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 μ—†λ‹€.
        console.log("yλŠ” : " + y); // μ•„λž˜κ°€ varμ˜€μœΌλ©΄ 'undefined'인데, let이라 μ•„μ˜ˆ 였λ₯˜λ‚¨ (ν˜Έμ΄μŠ€νŒ…x)
        let y = 20;
      }
      displayNumber();
profile
🎧 α΄˜ΚŸα΄€ΚΙͺΙ΄Ι’: UXUI (Feat: coding) ─────────βšͺ───── 𝟸:𝟷𝟾 / 𝟹:πŸ»πŸΌβ € γ…€ ◄◄⠀▐▐⠀►► ───○ πŸ”Š

0개의 λŒ“κΈ€