function composeArgs(args, partials, holders, isCurried) {
      var argsIndex = -1,
          argsLength = args.length,
          holdersLength = holders.length,
          leftIndex = -1,
          leftLength = partials.length,
          rangeLength = nativeMax(argsLength - holdersLength, 0),
          result = Array(leftLength + rangeLength),
          isUncurried = !isCurried;

      while (++leftIndex < leftLength) {
        result[leftIndex] = partials[leftIndex];
      }
      while (++argsIndex < holdersLength) {
        if (isUncurried || argsIndex < argsLength) {
          result[holders[argsIndex]] = args[argsIndex];
        }
      }
      while (rangeLength--) {
        result[leftIndex++] = args[argsIndex++];
      }
      return result;
    }
Creates an array that is the composition of partially applied arguments,
placeholders, and provided arguments into a single array of arguments.

@private
@param {Array} args The provided arguments.
@param {Array} partials The arguments to prepend to those provided.
@param {Array} holders The `partials` placeholder indexes.
@params {boolean} [isCurried] Specify composing for a curried function.
@returns {Array} Returns the new array of composed arguments.