[JavaScript] 비정형 인자 arguments

개요

자바스크립트에는 선언부에 명시되지 않은 파라미터를 별도로 저장하는 프로퍼티가 존재한다.

function argsTest() {
    // 생략
    arguments[2]; // 'arg3'
}

argsTest('arg1', 'arg2', 'arg3');

위의 argsTest() 호출 시 전달된 세 개의 문자열은 배열로 생성되며 arguments 프로퍼티를 통해 접근한다.

function argsTest() {
    if (arguments.length < 1) {
        throw new Error('usage: argsTest(url, 파라미터1, 파라미터2, ...)');
    }
    for (var i = 0; i < arguments.length; i++) {
        if (i != 1 && typeof arguments[i] != 'string') {
            alert('argsTest()의 인수는 문자열만 가능합니다.');
            return;
        }
    }
}

요렇게 활용할 수 있다:

const {log} = console;

// doSomething 후에 callback을 호출
function invokeCallbackAfterDoSomthing(callback) {
  // do something 부분
  // 이 영역이 어떤 특정한 함수를 실행하기전에 반드시 실행할 공통 함수 부분
  log(arguments.length);
  var args = [];
  for (var i = 1; i < arguments.length; i++) {
    log('i:', i, 'arguments[i]:', arguments[i])
    args.push(arguments[i]);
  }
  callback.apply(null, args);
}

invokeCallbackAfterDoSomthing(fn, 'PRE', 'AA');

function fn(mode, abc) {
  log('mode:', mode);
  log('abc:', abc);
}