function mapFun( fcn, n, thisArg ) {
	var out;
	var i;
	if ( !isFunction( fcn ) ) {
		throw new TypeError( format( 'invalid argument. First argument must be a function. Value: `%s`.', fcn ) );
	}
	if ( !isNonNegativeInteger( n ) ) {
		throw new TypeError( format( 'invalid argument. Second argument must be a nonnegative integer. Value: `%s`.', n ) );
	}
	// Note: we explicitly do not preallocate in order to ensure "fast" elements for large output arrays.
	out = [];
	for ( i = 0; i < n; i++ ) {
		out.push( fcn.call( thisArg, i ) );
	}
	return out;
}
Invokes a function `n` times and returns an array of accumulated function return values.

@param {Function} fcn - function to invoke
@param {NonNegativeInteger} n - number of function invocations
@param {*} [thisArg] - execution context
@throws {TypeError} first argument must be a function
@throws {TypeError} second argument must be a nonnegative integer
@returns {Array} accumulated results

@example
function fcn( i ) {
    return i;
}

var arr = mapFun( fcn, 5 );
// returns [ 0, 1, 2, 3, 4 ]