home강의 홈으로
Section 4. 함수
Lesson 3. 매개변수

💡 함수의 매개변수 갯수를 넘어가는 인수

  • 오류를 일으키지 않고 무시됨
function add(a, b) { return a + b; } console.log( add(1, 3), add(1, 3, 5), add(1, 3, 5, 7) );



I. 기본값 매개변수 default parameter

👉 MDN 문서 보기

function add(a = 2, b = 4) { console.log(`${a} + ${b}`); return a + b; } console.log( add(), add(1), add(1, 3) );



II. arguments - 함수 내에서 사용가능한 지역 변수

👉 MDN 문서 보기

  • 배열의 형태를 한 객체 - 배열은 아니지만 사실상 배열처럼 동작 (배열도 사실 객체지만...)
  • 함수 호출 시 전달된 모든 인수들을 배열 형태로 가짐
function add(a, b) { console.log('1.', arguments); console.log('2.', arguments[0]); console.log('3.', typeof arguments); return a + b; } console.log( '4.', add(1, 3, 5, 7) ); function add(a, b) { for (const arg of arguments) { console.log(arg); } return a + b; } console.log( add(1, 3, 5, 7) );
  • for ... of가 가능한 이유: iterable이기 때문 이후 다룸
  • ⚠️ 화살표 함수에서는 arguments 사용 불가! 화살표 함수로 바꾸어 실행해 볼 것

function getAverage() { let result = 0; for (const num of arguments) { result += num; } return result / arguments.length; } console.log( getAverage(1, 4, 7), getAverage(24, 31, 52, 80) ); // 💡 타입에 안전한 버전 function getAverage() { let result = 0, count = 0; for (const num of arguments) { if (typeof num !== 'number') continue; result += num; count++; } return result / count; } console.log( getAverage(2, '가', 8, true, 5) );

// ♻️ 새로고침 후 실행 const add = (a, b) => a + b; const sub = (a, b) => a - b; const mul = (a, b) => a * b; const div = (a, b) => a / b; function combineArms () { return (x, y) => { let result = x; for (const arm of arguments) { if (typeof arm !== 'function') continue; result = arm(result, y); } return result; } } const add_mul = combineArms(add, mul, 1, true); const add_mul_sub = combineArms(add, mul, sub); const add_mul_sub_div = combineArms(add, mul, sub, div); // 💡 익명 함수 사용됨 const add_mul_sub_div_pow = combineArms(add, mul, sub, div, (x, y) => x ** y); console.log( add_mul(8, 3), add_mul_sub(8, 3), add_mul_sub_div(8, 3), add_mul_sub_div_pow(8, 3) );



III. ...변수그룹명 - 나머지 변수 rest parameters

👉 MDN 문서 보기

  • 특정 매개변수들 뒤에 정해지지 않은 수의 매개변수들을 받을 때
  • 마지막 인자로만 사용 가능
  • arguments와는 달리 실제 배열
console.log( '3.', classIntro(3, '김민지', '영희', '철수', '보라') ); // 호이스팅 function classIntro (classNo, teacher, ...children) { console.log('1.', children); console.log('2.', arguments); let childrenStr = ''; for (const child of children) { if (childrenStr) childrenStr += ', '; childrenStr += child; } return `${classNo}반의 선생님은 ${teacher}, ` + `학생들은 ${childrenStr}입니다.` } const add = (a, b) => a + b; const sub = (a, b) => a - b; const mul = (a, b) => a * b; const div = (a, b) => a / b; function doMultiArms (x, y, ...arms) { let result = x; for (const arm of arms) { if (typeof arm !== 'function') continue; result = arm(result, y); } return result; } console.log( doMultiArms(8, 3, add, mul, 1, true), doMultiArms(8, 3, add, mul, sub), doMultiArms(8, 3, add, mul, sub, div), doMultiArms(8, 3, add, mul, sub, div, (x, y) => x ** y) );

🤔얄코에게 질문하기질문은 반.드.시 이리로 보내주세요! ( 강의사이트 질문기능 ✖ )

강의에서 이해가 안 되거나 실습상 문제가 있는 부분,
설명이 잘못되었거나 미흡한 부분을 메일로 알려주세요!

답변드린 뒤 필요할 경우 본 페이지에
관련 내용을 추가/수정하도록 하겠습니다.

이메일 주소
yalco@yalco.kr
메일 제목 (반드시 아래 제목을 붙여넣어주세요!)
[질문] 제대로 파는 자바스크립트 (무료 파트) 4-3

🛑질문 전 필독!!

  • 구글링을 먼저 해 주세요. 들어오는 질문의 절반 이상은 구글에 검색해 보면 1분 이내로 답을 찾을 수 있는 내용들입니다.
  • 오류 메시지가 있을 경우 이를 구글에 복붙해서 검색해보면 대부분 짧은 시간 내 해결방법을 찾을 수 있습니다.
  • 강의 페이지에 추가사항 등 놓친 부분이 없는지 확인해주세요. 자주 들어오는 질문은 페이지에 추가사항으로 업데이트됩니다.
  • "유료파트의 강의페이지는 어디 있나요?" - 각 영상의 시작부분 검은 화면마다 해당 챕터의 강의페이지 링크가 있습니다.
  • 질문을 보내주실 때는 문제가 어떻게 발생했고 어떤 상황인지 등을 구체적으로 적어주세요. 스크린샷을 첨부해주시면 더욱 좋습니다.
🌏 Why not change the world?