| 1234567891011121314151617181920212223242526272829 | // Some functions take a variable number of arguments, or a few expected// arguments at the beginning and then a variable number of values to operate// on. This helper accumulates all remaining arguments past the function’s// argument length (or an explicit `startIndex`), into an array that becomes// the last argument. Similar to ES6’s "rest parameter".function restArguments(func, startIndex) {  startIndex = startIndex == null ? func.length - 1 : +startIndex;  return function() {    var length = Math.max(arguments.length - startIndex, 0),        rest = Array(length),        index = 0;    for (; index < length; index++) {      rest[index] = arguments[index + startIndex];    }    switch (startIndex) {      case 0: return func.call(this, rest);      case 1: return func.call(this, arguments[0], rest);      case 2: return func.call(this, arguments[0], arguments[1], rest);    }    var args = Array(startIndex + 1);    for (index = 0; index < startIndex; index++) {      args[index] = arguments[index];    }    args[startIndex] = rest;    return func.apply(this, args);  };}module.exports = restArguments;
 |