Skip to content

Latest commit

Β 

History

History
92 lines (73 loc) Β· 3.18 KB

File metadata and controls

92 lines (73 loc) Β· 3.18 KB

function

  • ν•¨μˆ˜ μž‘μ„± μ—°μŠ΅μ„ μœ„ν•œ ν΄λ”μž…λ‹ˆλ‹€.

λͺ©μ°¨


문법

[ν•¨μˆ˜]

  1. μ„ μ–Έ
  2. ν‘œν˜„μ‹
function ν•¨μˆ˜μ΄λ¦„(λ§€κ°œλ³€μˆ˜) {
  // ν•¨μˆ˜ λ³Έλ¬Έ. return 값이 μ—†μœΌλ©΄ undefined λ°˜ν™˜

  // μ—λŸ¬ 직접 λ°œμƒμ‹œν‚¬ 경우
  if (쑰건1 || 쑰건2) {  // Truthyν•  경우 μ‹€ν–‰
    throw new Error(
      'μ—λŸ¬ 문ꡬ μž…λ ₯'
    );
  }

  return ...;
}

 // ν•¨μˆ˜λ₯Ό λ³€μˆ˜μ— ν• λ‹Ή ν›„ 좜λ ₯ λ˜λŠ” λ°”λ‘œ 좜λ ₯ 톡해 κ²°κ³Όκ°’ 확인
let λ³€μˆ˜ = ν•¨μˆ˜μ΄λ¦„1(인자);  // ν•¨μˆ˜μ— 전달
console.log(λ³€μˆ˜);

ν•¨μˆ˜ ν‘œν˜„μ‹

let λ³€μˆ˜1 = function() {
  // ν•¨μˆ˜ λ³Έλ¬Έ
}

λ³€μˆ˜1;  // ν•¨μˆ˜ λ³Έλ¬Έ(μ†ŒμŠ€ μ½”λ“œ)을 λ¬Έμžν˜•μœΌλ‘œ λ°”κΎΈμ–΄ 좜λ ₯

const λ³€μˆ˜2 = ν•¨μˆ˜μ΄λ¦„1;  // ν•¨μˆ˜λ₯Ό 볡사해 λ‹€λ₯Έ λ³€μˆ˜μ— ν• λ‹Ή
λ³€μˆ˜2();  // ν•¨μˆ˜κ°’ λ°˜ν™˜
  • μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” λ‹€λ₯Έ 언어와 달리 ν•¨μˆ˜λ₯Ό νŠΉλ³„ν•œ μ’…λ₯˜μ˜ κ°’μœΌλ‘œ μ·¨κΈ‰ν•œλ‹€.

ν•¨μˆ˜ ν‘œν˜„μ‹ vs ν•¨μˆ˜ μ„ μ–Έ

Category function declaration function expression
μƒμ„±μ‹œ λ…λ¦½λœ ꡬ문 ν˜•νƒœ ν‘œν˜„μ‹μ˜ 일뢀
호좜 μ‹€μ œ μ‹€ν–‰ 흐름이 ν•΄λ‹Ή ν•¨μˆ˜μ— λ„λ‹¬ν–ˆμ„λ•Œ μ •μ˜λ˜κΈ° 전도 κ°€λŠ₯ -> but. Bad Case
lexical environment ν•¨μˆ˜ λ³Έλ¬Έ 전체 -> Binding Object. μ–Έμ œλ“ μ§€ μ„ μ–Έλœ λ³€μˆ˜λ§Œ -> TDZ(μž„μ‹œ 사각지역). ν• λ‹Ή μ „ λΆˆκ°€
μ˜ˆμ‹œ var: undefined λ°˜ν™˜ -> ν•¨μˆ˜ 호좜 X let, const: μ°Έμ‘° 였λ₯˜
μŠ€μ½”ν”„ μ½”λ“œ 블둝 λ‚΄ κ°€λŠ₯. λ°– λΆˆκ°€λŠ₯ 블둝 λ‚΄μ™Έ λͺ¨λ‘ κ°€λŠ₯
  • 슀크립트 μ‹€ν–‰ μ „, Global context ν™˜κ²½μ—μ„œ 전역에 μ„ μ–Έλœ ν•¨μˆ˜ 선언문을 μ°Ύκ³ , ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό μƒμ„±ν•œλ‹€.
  • λ”°λΌμ„œ, μŠ€ν¬λ¦½νŠΈκ°€ μ‹€ν–‰λ˜κΈ° μ „ 'μ΄ˆκΈ°ν™” 단계'μ—μ„œ ν•¨μˆ˜ μ„ μ–Έ λ°©μ‹μœΌλ‘œ μ •μ˜ν•œ ν•¨μˆ˜κ°€ μƒμ„±λœλ‹€.

콜백 ν•¨μˆ˜

function warning(notification, permit, prohibit){
  if (confirm(notification)) permit()
  else prohibit();
}

warning(
  "이곳은 μœ„ν—˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ“€μ–΄κ°€μ‹œκ² μŠ΅λ‹ˆκΉŒ?",
  function() { console.log("μž…μž₯을 ν—ˆλ½ν•©λ‹ˆλ‹€."); },
  function() { console.log("μž…μž₯을 λΆˆν—ˆν•©λ‹ˆλ‹€."); }
);
  • ν•¨μˆ˜λ₯Ό 인수둜 μ „λ‹¬ν•˜κ³  "λ‚˜μ€‘μ— 호좜(back)"
  • μœ„μ™€ 같이 이름 없이 μ„ μ–Έν•œ ν•¨μˆ˜λ₯Ό "읡λͺ…ν•¨μˆ˜(anonymous function)"이라 ν•œλ‹€.

ν™”μ‚΄ν‘œ ν•¨μˆ˜

  • ν•¨μˆ˜λ‘œμ„œμ˜ κΈ°λŠ₯만 μˆ˜ν–‰ν•˜κΈ° λ•Œλ¬Έμ— μ„±λŠ₯적으둜 훨씬 가볍닀.

ν•¨μˆ˜ μ„ μ–Έλ¬Έ, ν•¨μˆ˜ ν‘œν˜„μ‹κ³Ό 차이점

  1. arguments ν™”μ‚΄ν‘œ ν•¨μˆ˜ -> ...args

  2. constructor, 객체λ₯Ό μƒμ„±ν•˜λŠ” μƒμ„±μžλ₯Ό κ°€μ§€κ³  μžˆμ§€ μ•Šλ‹€.

  3. thisκ°€ κ°€λ¦¬ν‚€λŠ” λŒ€μƒμ΄ λ‹€λ₯΄λ‹€. - λΆ€λͺ¨μ˜ thisκ°€ κ°€λ¦¬ν‚€λŠ” window 좜λ ₯