JavaScript Functions

읡λͺ… ν•¨μˆ˜

이름 없이 μƒμ„±λ˜λŠ” ν•¨μˆ˜

  • μƒμ„±λ˜μ–΄ λ³€μˆ˜μ— ν• λ‹Ή

    • λ³€μˆ˜λŠ” ν•¨μˆ˜μ˜ 이름 역할을 함!

  • 선언적 ν•¨μˆ˜ μ •μ˜λ₯Ό 톡해 μƒμ„±λœ ν•¨μˆ˜μ˜ 이름도 ν•¨μˆ˜λ₯Ό κ°€λ¦¬ν‚€λŠ” λ³€μˆ˜μ΄λ‹€!

ν•¨μˆ˜ ν˜Έμ΄μŠ€νŒ…

  • JavaScript μ—μ„œλŠ” λͺ¨λ“  선언이 ν˜Έμ΄μŠ€νŒ… λœλ‹€

  • ν•¨μˆ˜ μ„ μ–Έλ¬Έμ˜ 경우 μ„ μ–Έ, μ΄ˆκΈ°ν™”, 할딩이 λͺ¨λ‘ 이뀄져 μ‹€ν–‰ κ°€λŠ₯

  • ν•¨μˆ˜ ν‘œν˜„μ‹μ€ λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…μ΄ λ°œμƒν•˜μ—¬ undefined. 즉, μ‹€ν–‰ λΆˆκ°€

λ°°μ—΄ ν…ŒμŠ€νŠΈ ν•¨μˆ˜ (Call-back ν•¨μˆ˜)

Call-back ν•¨μˆ˜: method μ‹€ν–‰ μ‹œ μžλ™μœΌλ‘œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜

Array helper methods

λ°°μ—΄ 검사 method의 call-back ν•¨μˆ˜

  • forEach

    • Element ν•˜λ‚˜ν•˜λ‚˜ μ‘°μž‘ μ‹œ μ‚¬μš©

    • Element ν•˜λ‚˜ν•˜λ‚˜ call-back ν•¨μˆ˜μ— μ „λ‹¬ν•˜μ—¬ 처리

    • Usage

      arr.forEach( callback(currentvalue[, index[, array]] [, thisArg]))
      function hiUser(element, index, array){
          document.write("<p>Hi " +element+ "!</p>")
      }
      var users = ["jerry", "tom", "steve"];
      users.forEach(hiUser);

  • map

    • λ°°μ—΄ μš”μ†Œ ν•˜λ‚˜ ν•˜λ‚˜μ— call-back ν•¨μˆ˜ 처리 ν›„ μƒˆλ‘œμš΄ λ°°μ—΄ λ°˜ν™˜

      function sayBabyAnmial(animal){
          var result;
          switch(animal){
              case "개":
                  result = "κ°•μ•„μ§€";
              break;
              case "λ‹­":
                  result = "병아리";
              break;
              default:
                  result = "μƒˆλΌ " + animal;
          }
          return result;
      }
      var animals = ["고양이", "개", "λ‹€λžŒμ₯", "λ‹­","μ—¬μš°"];
      var baby = animasl.map(sayBabyAnimal);

  • filter

    • μ›ν•˜λŠ” μš”μ†Œλ₯Ό μ •λ¦¬ν•˜μ—¬ μƒˆλ‘œμš΄ λ°°μ—΄ λ°˜ν™˜

      • μš”μ†Œ 정리할 λ•Œ call-back ν•¨μˆ˜ μ‚¬μš©

    • λ°°μ—΄ 객체 κ²€μ‚¬μš© method μ‚¬μš©μ‹œ call-back ν•¨μˆ˜ 전달 인자

      1. element

      2. index

      3. array

      function isBigEnough(element, index, array){
          return (element >= 10);
      }
      var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
      document.write(filtered.toString()); //12,130,44

  • every

    • λͺ¨λ“  λ°°μ—΄ μš”μ†Œ call-back ν•¨μˆ˜μ—μ„œ μ œμ‹œν•˜λŠ” μš”μ†Œ 톡과 μ‹œ return true, μ‹€νŒ¨ μ‹œ return false

      function isBigEnough(element, index, array){
          return (element >= 10);
      }
      var passed = [12, 5, 8, 130, 44].every(isBigEnough); //false
      var passed = [12, 54, 18, 130, 44].every(isBigEnough); //true

  • some

    • every와 λ…Όλ¦¬μ μœΌλ‘œ λ°˜λŒ€λ˜λŠ” 경우

      • call-back ν•¨μˆ˜ μš”κ΅¬ν•˜λŠ” element ν•œ κ°œλΌλ„ 쑴재: return true

      • ν•˜λ‚˜λ„ μ—†μœΌλ©΄: return false

ν•¨μˆ˜μ˜ 유효 λ²”μœ„

  • JavaScript === ν•¨μˆ˜ν˜• μ–Έμ–΄

  • ν•¨μˆ˜λ₯Ό κΈ°μ€€μœΌλ‘œ 유효 λ²”μœ„ μ„€μ •

    • ν•¨μˆ˜

      : μžμ‹ λ§Œμ˜ 유효 λ²”μœ„ μ„€μ •

      • ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ μ„ μ–Έλœ λ³€μˆ˜ => ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œλ§Œ 유효

Closure

First class function

  • JavaScript ν•¨μˆ˜μ˜ νŠΉμ§•

    • ν•¨μˆ˜λ₯Ό 인자둜 전달 κ°€λŠ₯함

    • ν•¨μˆ˜λ₯Ό λ°˜ν™˜ν•  수 있음

    • λ³€μˆ˜μ— ν•¨μˆ˜λ₯Ό ν• λ‹Ή κ°€λŠ₯함

  • μœ„μ˜ 쑰건은 programming μ–Έμ–΄μ—μ„œμ˜ 일급객체 (first class object / first class citizen) 의 쑰건이닀

  • ν•¨μˆ˜λ₯Ό 인자둜 전달

  • ν•¨μˆ˜λ₯Ό λ°˜ν™˜

Closure

: closureλŠ” ν•¨μˆ˜μ™€ ν•¨μˆ˜κ°€ μ„ μ–Έλœ μ–΄νœ˜μ  ν™˜κ²½ (lexical scoping, environment)의 쑰합이닀

function makeAdder() {
    var x =1
    return function(y){
        return x+y
    }''
}
var add1 = 
  • 밖에 μžˆμ—ˆλ˜ λ³€μˆ˜ 등을 μ•ˆμ—μ„œλ„ κΈ°μ–΅ν•˜κ³  μžˆλŠ” 것!!!

LEGB rule

  • local

  • environment

  • global

  • build-in

LEGB figure

Last updated

Was this helpful?