function functionName( fcn ) {
	// TODO: add support for generator functions?
	if ( isFunction( fcn ) === false ) {
		throw new TypeError( format( 'invalid argument. Must provide a function. Value: `%s`.', fcn ) );
	}
	if ( isFunctionNameSupported ) {
		return fcn.name;
	}
	return RE.exec( fcn.toString() )[ 1 ];
}
Returns the name of a function.

@param {Function} fcn - input function
@throws {TypeError} must provide a function
@returns {string} function name

@example
var v = functionName( Math.sqrt );
// returns 'sqrt'

@example
var v = functionName( function foo(){} );
// returns 'foo'

@example
var v = functionName( function(){} );
// returns '' || 'anonymous'

@example
var v = functionName( String );
// returns 'String'