본문 바로가기

JavaScript/Basic-Javascript

자바스크립트 정리하며 배우기[21] - Arguments : 유동적인 함수 만들기

안녕하세요. Tay 입니다.

함수를 호출할 때 암묵적으로 arguments 객체가 함수 내부로 전달됩니다.

이 arguments 객체를 잘 활용하면 유동적인 함수를 개발할 수 있습니다.

 

 

Argument

함수 호출과 동시에 함수 내부로 전달되는 유사 배열 객체

 

1) index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
  </head>
  <body>
    <!-- <script src="function.js"></script> -->
    <!-- <script src="hoisting.js"></script> -->
    <!-- <script src="arrow.js"></script> -->
    <!-- <script src="use-function.js"></script> -->
    <!-- <script src="callback.js"></script> -->
    <!-- <script src="inner.js"></script> -->
    <script src="arguments.js"></script>
  </body>
</html>

2) arguments.js

arguments.js

function func(arg1, arg2) {
  console.log(arg1, arg2);
  console.log(arguments);
}

func(2, 3, 4);
func(1);
console.dir(func);
  1. arg1, 2 인자들을 받는 함수 func 를 선언한다.
  2. func 함수는 log 로 arg1, 2 를 출력하고, 내부로 전달 된 arguments를 출력한다.
  3. 인자 (2, 3, 4) 로 func 함수 실행
  4. 인자 (1) 로 func 함수 실행
  5. 마지막으로 dir 로 func 메소드 확인

 

Github Commit

 

결과 :

1. 인자 (2, 3, 4) 와 arguments

인자 (2, 3, 4) 로 func 함수 실행

func 는 arg1 과 2 만 출력하기때문에 인자값 4는 생략됐다.

그렇지만, 함수 내부로 전달 된 arguments 를 보면 유사배열 2번 에 4가 삽입되어있다.

 

2. 인자 (1) 와 arguments

인자 (1) 로 func 함수 실행

func 함수는 인자값 2개를 받게 되어있지만, 위 내용에서는 1 만 전달했다.

다른 언어라면 에러가 발생하지만, 자바스크립트에서는 자동으로 undefined 가 채워진다.

 

Arguments property 분석!

func(2, 3, 4) func(1)
  • 인자값 4를 받은 변수가 없어서 생략된 것 같으나, arguments 객체의 유사 배열 형식으로 들어가있다.
  • 인자값 1만 넣은 경우, arguments 객체의 유사 배열 형식으로 1만 존재
  • length 프로퍼티가 존재한다. (인자값의 갯수를 나타낸다.)
  • callee 프로퍼티는 실행 중인 함수의 참조값을 나타낸다.

 

Arguments.callee functioin func

callee 는 실행중인 함수의 참조값을 갖고있기때문에, callee 과 func 는 같은 값을 갖는다.

 

Arguments 를 이용한 유동적인 함수 작성

function plus

function plus() {
  var temp = 0;
  for (index in arguments) {
    temp += arguments[index];
  }
  console.log(`Plus 1 to ${arguments.length} is ${temp}`);
}

plus(1, 2, 3, 4, 5);

인자값 갯수를 설정하지않고 받는대로 더해서 총합을 알려주는 함수이다.

 

arguments 는 유사배열 형태이기때문에 for - in 문을 사용해서 값을 받는다.

arguments.length 로 인자값 개수를 유동적으로 구한다.

 

 

결과 :

 

Github Commit

 

위 처럼 arguments 를 이용하면 유동적인 함수를 개발 할 수 있으므로 잘 알아두자!!

 

이 글은 개인 공부목적으로 작성되었습니다.

정보가 잘못 되거나 궁금한 사항은 댓글로 부탁드립니다!! 읽어주셔서 감사합니다.