티스토리 뷰
//sum()함수는 전달받는 매개변수가 지정되어있지 않음
function sum() {
//변수 i는 loop를 위한 변수 굳이 따로 뺄 필요없이 for문 내부에 let i 라고 써줘도 된다.
let i, _sum = 0;
for (i = 0; i < arguments.length; i++) {
document.write(`${i} ${arguments[i]} <br/>`);
_sum += arguments[i];
}
return _sum;
}
//sum()에 4개의 인자(1,2,3,4)를 전달
document.write(`result : ${sum(1, 2, 3, 4)}`);
- 함수에는 arguments라는 변수에 담긴 숨겨진 유사 배열(배열과 비슷하긴한데 배열은 아닌 것)이 있다. 실제로는 arguments 객체의 인스턴스입니다.
- 이 배열에는 함수를 호출할 때 입력한 인자가 담겨있다.
- 코드를 보면 함수 sum에 매개변수가 비어있음에도 sum의 인자(argument)로 4개의 숫자를 전달하고 있다.
- JS는 매우 관대한 언어라서 함수에 매개변수를 정의하지 않더라도 혹은 매개변수의 숫자와 다르다하더라도 인자의 갯수를 마음대로 지정해도 오류가 나지 않습니다.
- a += 1;은 a = a+1;과 같습니다.
- arguments는 함수안에서 사용할 수 있도록 그 이름이나 특성이 약속되어 있는 일종의 배열(객체) // 배열과 유사할 뿐이지 배열과 같은 것은 아닙니다.
- arguments를 사용하면 전달받는 인자의 정보를 제대로 알지 못해도 활용할 수 있다.
- arguments.length를 이용해서 함수에 전달된 인자의 개수도 알 수 있으며 반복문을 결합하여 전달된 인자의 값을 순차적으로 가져올 수 있다.
function zero() {
console.log("zero.length", zero.length, "arguments", arguments.length);
}
function one(arg1) {
console.log("one.length", one.length, "arguments", arguments.length);
}
function two(arg1, arg2) {
console.log("two.length", two.length, "arguments", arguments.length);
}
zero(); // zero.length 0 arguments 0
one("val1", "val2"); // one.length 1 arguments 2
two("val1"); // two.length 2 arguments 1
- 주의할 점은 함수.length와 arguments.length가 다르다는 것이다.
- arguments.length : 함수로 전달된 실제 인자의 수를 나타냄
- 함수.length : 함수에 정의된 매개변수의 수를 의미
- 코드를 보면 함수one()에서 one.length를 했을 때는 1, arguments.length를 했을 때는 2를 결과로 출력한다.
- 이유는 전달받은 인자는 2개인데 one함수에 정의된 매개변수는 "arg1"하나 이기 때문이다.
- 두 가지 차이를 이용해서 코드를 작성할 때 사용자가 인자로 전달하는 값이 함수에 정의된 매개변수의 수를 초과하면 경고창을 띄우는 등 활용을 할 수 있겠죠!
'Frontend > JavaScript' 카테고리의 다른 글
[생활코딩] JS문법(객체지향)- 객체지향 프로그래밍? (0) | 2022.01.15 |
---|---|
[생활코딩] JS문법(함수)- 함수의 호출 : apply (0) | 2022.01.14 |
[생활코딩] JS문법(함수)- 클로저 (0) | 2022.01.12 |
[생활코딩] JS문법(함수)- 값으로서의 함수,콜백, 비동기처리 (0) | 2022.01.11 |
[생활코딩] JS문법(함수)- 유효범위: 전역변수와 지역변수 (0) | 2022.01.09 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- float 레이아웃
- 타입스크립트 DT
- 프리렌더링확인법
- 틸드와 캐럿
- 항해99추천비추천
- 항해99프론트후기
- grid flex
- 항해99프론트
- 타입스크립트 장점
- D 플래그
- 원티드 3월 프론트엔드 챌린지
- 부트캠프항해
- tilde caret
- getServerSideProps
- text input pattern
- 형제 요소 선택자
- nvm경로 오류
- reactAPI
- is()
- && 셸 명령어
- aspect-ratio
- Prittier
- getStaticPaths
- fs모듈 넥스트
- 원티드 FE 프리온보딩 챌린지
- ~ ^
- 원티드 프리온보딩 FE 챌린지
- nvm 설치순서
- 원티드 프리온보딩 프론트엔드 챌린지 3일차
- 프리온보딩 프론트엔드 챌린지 3월
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함