function maxBy( x, clbk, thisArg ) {
	if ( !isCollection( x ) ) {
		throw new TypeError( format( 'invalid argument. First argument must be an array-like object. Value: `%s`.', x ) );
	}
	if ( !isFunction( clbk ) ) {
		throw new TypeError( format( 'invalid argument. Second argument must be a function. Value: `%s`.', clbk ) );
	}
	return strided( x.length, x, 1, 0, wrapper );

	/**
	* Invokes a provided callback.
	*
	* @private
	* @param {*} value - current element
	* @param {NonNegativeInteger} aidx - current array index
	* @param {NonNegativeInteger} sidx - current strided index
	* @param {Collection} arr - input array
	* @returns {number} callback return value
	*/
	function wrapper( value, aidx, sidx, arr ) {
		return clbk.call( thisArg, value, aidx, arr );
	}
}
Computes the maximum value of an array via a callback function.

@param {Collection} x - input array
@param {Callback} clbk - callback
@param {*} [thisArg] - execution context
@throws {TypeError} first argument must be an array-like object
@throws {TypeError} second argument must be a function
@returns {number} maximum value

@example
var x = [ -2.0, 1.0, 3.0, -5.0, 4.0, 0.0, -1.0, -3.0 ];

function accessor( v ) {
    return v * 2.0;
}

var v = maxBy( x, accessor );
// returns 8.0