Javascript 함수 - (3) 인자와 매개 변수
인자와 매개 변수
- 인자와 매개 변수는 개수도 같고, 데이터 타입도 같음
- 개수 = 프로그래밍 시 사용자가 작성
- 매개 변수의 데이터 타입 = 인자의 데이터 타입에 따라 자동 결정(따로 설정 않아도 됨)
- 기본 작성
function 함수명(매개 변수1, 매개 변수2, 매개 변수3) { //함수 선언 실행 문장; return 반환값; } result = 함수명(인자1, 인자2, 인자3); //함수 호출
인자를 순서에 맞게 매개 변수에 대입하게 됨
-
이름이 같고 매개 변수의 개수가 다른 함수가 여러개 있으면 맨 마지막에 선언된 함수가 호출됨.
- 인자의 개수가 0이거나 매개 변수보다 적으면
- NaN(Not a Number) 출력됨
- NaN(Not a Number)은 연산 과정에서 잘못된 입력을 받았음을 나타내는 기호
- 말 그대로 숫자로 반환하지 못할 때 출력됨
- 자바스크립트에서 NaN은 전역 변수
- NaN 여부는 isNaN() 함수를 사용하여 확인 가능
isNaN(NaN); //true isNaN('string'); //true isNaN(0); //false isNaN('0'); //false
- NaN(Not a Number) 출력됨
- 인자의 개수가 매개 변수보다 많으면
- 첫 인자부터 적용된 후 나머지 인자 값은 undefined 처리
인자의 개수에 따른 처리 결과 예시
- 인자의 개수가 적거나 많을 경우 반환값 (+ 이름이 같고 매개 변수의 개수만 다른 함수가 여러번 선언 됐을 때)
function add() { var sum=1; return sum; } function add(x) { var sum=x+1; return sum; } function add(x,y) { var sum=x+y; return sum; } //위의 함수들은 마지막으로 선언된 함수로 인해 무시됨 function add(x,y,z) { var sum=x+y+z; return sum; } //이름이 같고 매개 변수의 개수만 다른 함수가 여러개 있으면 마지막에 선언된 함수만 호출됨 var result0=add(); var result1=add(1); var result2=add(2,3); var result3=add(4,5,6); var result4=add(7,8,9,10); document.write("함수 호출 인자 없음 : "+ result0 +"<p/>"); document.write("함수 호출 인자 부족 : "+ result1 +"<p/>"); document.write("함수 호출 인자 부족 : "+ result2 +"<p/>"); document.write("함수 호출 인자 호출 : "+ result3 +"<p/>"); document.write("7, 8, 9만 인자값으로 적용 : "+ result4 +"<p/>");
- 인자의 개수가 적을 때 처리 가능하도록 하는 방법 예시
- 정상적으로 처리될 수 있도록 프로그래밍 수정 예사
- 제어문을 이용하여 처리되도록 수정
function add(x, y, z) { var sum; if((y===undefined) && (z===undefined)) { sum = x; } else if(z===undefined) { sum = x + y; } else { sum = x + y + z; } return sum; } var result1 = add(1); var result2 = add(1, 2); var result3 = add(1, 2, 3); document.write("함수 호출 인자 부족 :" + result1 + "<p/>"); document.write("함수 호출 인자 부족 :" + result2 + "<p/>"); document.write("함수 호출 인자 호출 :" + result3 + "<p/>");
이 방법은 인자의 개수가 너무 많거나 자주 변하는 경우, 적용하기 어려움(제어문 조건이 늘어남)
아래의 방법으로도 해결 가능
-
인자의 개수에 맞게 작동하도록 프로그래밍하기
- arguments 객체의 배열(array) 구조로 인자 처리
- arguments[0], arguments[1], arguments[2] … argument[n]과 같이 각 인자의 값을 배열에 저장하여 처리
- arguments.length는 총 인자 수를 의미
function add() { var i, sum = 0; for(i=0; i<arguments.length; i++) { sum=sum+arguments[i]; } document.write("수행 결과 : "+sum+"<p/>"); } add(1, 2); add(1, 2, 3); add(1, 2, 3, 4); add(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
- arguments 객체의 배열(array) 구조로 인자 처리