function partial(func) {
    var args = slice.call(arguments, 1),
        argsLength = args.length;

    return function() {
      var result,
          others = arguments;

      if (others.length) {
        args.length = argsLength;
        push.apply(args, others);
      }
      result = args.length == 1 ? func.call(this, args[0]) : func.apply(this, args);
      args.length = argsLength;
      return result;
    };
  }
Creates a new function that, when called, invokes `func` with any additional
`partial` arguments prepended to those passed to the new function. This method
is similar `bind`, except it does **not** alter the `this` binding.

@static
@memberOf _
@category Functions
@param {Function} func The function to partially apply arguments to.
@param {Mixed} [arg1, arg2, ...] Arguments to be partially applied.
@returns {Function} Returns the new partially applied function.
@example

var greet = function(greeting, name) { return greeting + ': ' + name; };
var hi = _.partial(greet, 'hi');
hi('moe');
// => 'hi: moe'