code: function bind(func, thisArg) {
        if (arguments.length < 3) {
          return createWrapper(func, BIND_FLAG, null, thisArg);
        }
        if (func) {
          var arity = func[expando] ? func[expando][2] : func.length,
              partialArgs = slice(arguments, 2);
  
          arity -= partialArgs.length;
        }
        return createWrapper(func, BIND_FLAG | PARTIAL_FLAG, arity, thisArg, partialArgs);
      }
docs: Creates a function that, when called, invokes `func` with the `this`
  binding of `thisArg` and prepends any additional `bind` arguments to those
  provided to the bound function.
  
  Note: Unlike native `Function#bind` this method does not set the `length`
  property of bound functions.
  
  @static
  @memberOf _
  @category Functions
  @param {Function} func The function to bind.
  @param {*} [thisArg] The `this` binding of `func`.
  @param {...*} [args] Arguments to be partially applied.
  @returns {Function} Returns the new bound function.
  @example
  
  var func = function(greeting) {
  return greeting + ' ' + this.name;
  };
  
  func = _.bind(func, { 'name': 'fred' }, 'hi');
  func();
  // => 'hi fred'