🀍 은지log 🀍

ν•¨μˆ˜ λ³Έλ¬Έ

πŸ’œ λͺ¨λ˜Javascript

ν•¨μˆ˜

Eun_zii 2022. 9. 28. 14:21

ν•¨μˆ˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ κ°€μž₯ μ€‘μš”ν•œ 핡심 κ°œλ…μ΄λ©°, 또 λ‹€λ₯Έ μ€‘μš”ν•œ 핡심 κ°œλ…λ“€( μŠ€μ½”ν”„, μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ, ν΄λ‘œμ €, μƒμ„±μž ν•¨μˆ˜μ— μ˜ν•œ 객체 생성, λ©”μ„œλ“œ, this, ν”„λ‘œν† νƒ€μž…, λͺ¨λ“ˆν™” λ“±)κ³Ό κΉŠμ€ 관련이 μžˆλ‹€.

  • ν•¨μˆ˜λŠ” λ‹€λ₯Έ λ³€μˆ˜μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ λ³€μˆ˜μ— 할당이 되고 ν•¨μˆ˜μ˜ 맀개 λ³€μˆ˜λ‘œ 전달이 되며 λ¦¬ν„΄κ°’μœΌλ‘œλ„ 리턴이 λœλ‹€. (Function Expression)
  • ν•¨μˆ˜λŠ” ν”„λ‘œκ·Έλž¨μ„ κ΅¬μ„±ν•˜λŠ” 기본적이 building block 이며 sub-program 이라고도 뢈리며 μ—¬λŸ¬λ²ˆ μž¬μ‚¬μš© κ°€λŠ₯ν•˜λ‹€λŠ” μž₯점이 μžˆλ‹€.
  • ν•œκ°€μ§€ task λ‚˜ μ–΄λ– ν•œ 값을 κ³„μ‚°ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•œλ‹€.
  • ⭐️ ν•¨μˆ˜λŠ” input κ³Ό output이 μ€‘μš”ν•˜κ³  ν•¨μˆ˜μ˜ 이름을 μ •ν•˜λŠ”κ²ƒμ΄ μ€‘μš”! 
function name(param1, param2) { body ... return; }

 

ν•˜λ‚˜μ˜ ν•¨μˆ˜λŠ” ν•œκ°€μ§€μ˜ 일만 ν•˜λ„λ‘ λ§Œλ“€μ–΄μ•Ό ν•œλ‹€ 

  • ν•¨μˆ˜μ˜ 이름을 지정할땐 무언가λ₯Ό λ™μž‘ν•˜λŠ”κ²ƒμ΄κΈ° λ•Œλ¬Έμ— doSomething, command, verb 둜 지정해야 ν•œλ‹€.
  • ν•¨μˆ˜μ˜ 이름을 μ •ν•˜κΈ° μ–΄λ ΅λ‹€λ©΄ λ„ˆλ¬΄ λ§Žμ€κ²ƒμ„ λ‹΄κ³ μžˆλŠ”κ²ƒμ΄ μ•„λ‹Œμ§€, μ„ΈλΆ„ν™” ν• μˆ˜ μžˆμ§€ μ•Šμ€μ§€ 고민해보면 더 κΉ¨λ—ν•œ ν•¨μˆ˜λ₯Ό λ§Œλ“€μˆ˜ μžˆλ‹€.

λ§€κ°œλ³€μˆ˜

μ›μ‹œ νƒ€μž…μ€ κ°’ value 을 λ³΅μ‚¬ν•˜κ³ , ( κΉŠμ€ 볡사 )
μ°Έμ‘° νƒ€μž…μ€ μ£Όμ†Œ refernce λ₯Ό λ³΅μ‚¬ν•œλ‹€. ( 얕은 볡사 ) 

κΈ°λ³Έ λ§€κ°œλ³€μˆ˜ (Default Paremeters)

function showMessage(message, from) {
  console.log(`${message} by ${from}`);
}
showMessage('Hi!'); // Hi! by undefined 
// from 이 μ •μ˜ λ˜μ–΄μžˆμ§€ μ•ŠκΈ° λ•Œλ¬Έμ— undefined둜 좜λ ₯

function showMessage(message, from = 'unknown') {
  console.log(`${message} by ${from}`);
}
showMessage('Hi!'); // Hi! by unknown
// λ§€κ°œλ³€μˆ˜ μ˜†μ— μ›ν•˜λŠ” default 값을 지정해 λ†“μœΌλ©΄ μ‚¬μš©μžκ°€ λ§€κ°œλ³€μˆ˜λ₯Ό μ§€μ •ν•˜μ§€ μ•Šμ„λ•Œ 
// 값이 λŒ€μ²΄ λ˜μ–΄μ„œ 좜λ ₯λœλ‹€

λ‚˜λ¨Έμ§€ λ§€κ°œλ³€μˆ˜ (Rest Parameters)

" ... " 을 μ‚¬μš©ν•˜κ³  λ°°μ—΄ ν˜•νƒœλ‘œ μ „λ‹¬λœλ‹€.

function printAll(...args) {
  for (let i = 0; i < args.length; i++) {
    console.log(args[i]); // 방법 β‘ 
  }
  // for (const arg of args) {
  //   console.log(arg);    방법 β‘‘
  // }
  // args.foreach((arg) => console.log(arg)); 방법 β‘’
}
printAll('Eunji', 'Amy', 'Coding'); // Eunji, Amy, Coding

ν•¨μˆ˜ λ°˜ν™˜ κ°’ (Return a value)

ν•¨μˆ˜κ°€ μ™„λ£Œλ˜μ—ˆμ„ λ•Œ ν•¨μˆ˜κ°€ λ°˜ν™˜ν•˜λŠ” κ°’.

  • λ°˜ν™˜λ¬Έμ€ ν•¨μˆ˜ λͺΈμ²΄ λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš©ν• μˆ˜ μžˆλ‹€.
  • return ν‚€μ›Œλ“œμ™€ λ°˜ν™˜κ°’ 사이에 μ€„λ°”κΏˆμ΄ 있으면 λ¬΄μ‹œλœλ‹€. ( μ„Έλ―Έμ½œλ‘  ; μ‚½μž… κΈˆμ§€ )

Early return, early exit

function upgradeUser(user) {
  if (user.point > 10) {
    // logic...
  }
} // Bad😱 - 블둝 μ•ˆμ—μ„œ λ‘œμ§μ„ 많이 μž‘μ„± ( if/ else) ν•˜λ©΄ 가독성이 떨어진닀.
function upgradeUser(user) {
  if (user.point > 10) {
    return; // 쑰건이 λ§žμ§€ μ•ŠλŠ”λ‹€λ©΄ return으둜 빨리 ν•¨μˆ˜λ₯Ό μ’…λ£Œν•˜κ³ 
  } // 쑰건이 λ§žμ„λ•Œλ§Œ ν•„μš”ν•œ logic을 μ‹€ν–‰ν•˜λŠ”κ²Œ μ’‹λ‹€.
    // logic...
} // Good😁

ν•¨μˆ˜ μ„ μ–Έ & ν‘œν˜„ ( Function Declaration & Expression )

const print = function () { // 읡λͺ… ν•¨μˆ˜(anonymous function)
  console.log('print');
};
print(); // ν•¨μˆ˜ 호좜 -> print 좜λ ₯
const printAgain = print; // printAgain은 μœ„μ— μ„ μ–Έλœ ν•¨μˆ˜λ₯Ό 가리킀고 μžˆμœΌλ―€λ‘œ
printAgain(); // ν•¨μˆ˜ ν˜ΈμΆœμ„ ν•˜λ©΄ -> print κ°€ 좜λ ₯λœλ‹€.

μ„ μ–Έλ¬Έ κ³Ό ν‘œν˜„μ‹μ˜ κ°€μž₯ 큰 차이점은

  • 선언문은 ν˜Έμ΄μŠ€νŒ…μ΄ κ°€λŠ₯함. ( ν•¨μˆ˜κ°€ μ„ μ–Έλ˜κΈ° 이전에 호좜 κ°€λŠ₯ )
  • 선언문은 ν•¨μˆ˜ 이름을 μƒλž΅ν• μˆ˜ μ—†λ‹€.
  • 선언문은 ν‘œν˜„μ‹μ΄ μ•„λ‹Œ λ¬Έ( Statement ) 이닀.

  • ν‘œν˜„μ‹μ€ ν• λ‹Ήλœ λ‹€μŒλΆ€ν„° 호좜이 κ°€λŠ₯ν•˜λ‹€.
  • ν‘œν˜„μ‹μ€ ν‘œν˜„μ‹μ΄ λ¬Έ( statement ) 이닀.

콜백 ν•¨μˆ˜ ( Callback Function )

function randomQuiz(answer, printYes, printNo) {
  if (answer === 'love u') {
    printYes();
  } else {
    printNo();
  }
}
const printYes = function () { // 읡λͺ… ν•¨μˆ˜
  console.log('Yes!');
};
// ν‘œν˜„μ‹μ—μ„œ 이름을 μ“°λŠ” μ΄μœ λŠ” 디버깅을 ν• λ•Œ μŠ€νƒ 좔적에 ν•¨μˆ˜ 이름이 λ‚˜μ˜€κ²Œ ν•˜λ €κ³  μ‚¬μš©
// λ˜λŠ” ν•¨μˆ˜ μ•ˆμ—μ„œ μžμ‹  슀슀둜 λ˜λ‹€λ₯Έ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν• λ•Œ (μž¬κ·€ ν•¨μˆ˜) 이닀.
const printNo = function print() { // κΈ°λͺ… ν•¨μˆ˜
  console.log('No!');
}
randomQuiz('wrong', printYes, printNo); // No!
randomQuiz('love u', printYes, printNo); // Yes!

ν™”μ‚΄ν‘œ ν•¨μˆ˜ ( Arrow Function )

ν™”μ‚΄ν‘œ ν•¨μˆ˜λŠ” 읡λͺ… ν•¨μˆ˜ 이닀.

  • λΈ”λ‘ν˜• 보닀 훨씬 κ°„κ²°ν•˜κ²Œ μ‚¬μš© ν• μˆ˜ μžˆλ‹€.
const simplePrint = function () {
  console.log('simplePrint!');
};
     πŸ”» πŸ”» πŸ”»
⭐️ const simplePrint = () => console.log('simplePrint!');

μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜ ( Immediately Invoked Function Expression )

ν•¨μˆ˜λ₯Ό 선언함과 λ™μ‹œμ— μ¦‰μ‹œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜ 이닀.

  • μ¦‰μ‹œ μ‹€ν–‰ ν•¨μˆ˜λŠ” λ°˜λ“œμ‹œ κ΄„ν˜Έ ()둜 선언을 감싸야 ν•œλ‹€.
(function hello() {
  console.log('IIFE');
})(); // IIFE

μž¬κ·€ ν•¨μˆ˜ ( Recursive function )

자기 μžμ‹ μ„ ν˜ΈμΆœν•˜λŠ” ν–‰μœ„, 즉 μž¬κ·€ ν˜ΈμΆœμ„ ν•˜λŠ” ν•¨μˆ˜ 이닀.

  • ν•¨μˆ˜ λͺΈμ²΄ λ‚΄λΆ€μ—μ„œλŠ” ν•¨μˆ˜ 이름을 μ΄μš©ν•΄ 자기 μžμ‹ μ„ ν˜ΈμΆœν•  수 μžˆμ§€λ§Œ, ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œλŠ” λ°˜λ“œμ‹œ ν•¨μˆ˜λ₯Ό κ°€λ¦¬ν‚€λŠ” μ‹λ³„μžλ‘œ ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€.
 
728x90

'πŸ’œ λͺ¨λ˜Javascript' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

ν”„λ‘œνΌν‹° μ–΄νŠΈλ¦¬λ·°νŠΈ  (1) 2022.09.28
μŠ€μ½”ν”„ (Scope)  (0) 2022.09.28
μ›μ‹œκ°’κ³Ό 객체 비ꡐ  (0) 2022.09.28
객체 λ¦¬ν„°λŸ΄  (0) 2022.09.28
단좕평가  (0) 2022.09.28