The parameter isn't a problem. The recursion is the (most severe immediate) problem.
When you have a function named man call man, it calls itself. You're starting an unbounded set of background shells. Using command will prevent that recursion, as it bypasses function lookup.
One change I would suggest making with respect to parameter-passing is using "$@", so the full set of parameters is passed through, not only the first one:
man() { command man -H "$@" & }
Note, by the way, that at least for the BSD implementation used by Apple, man -H expects the name of a program that can convert HTML to text to be the immediate following argument. If you think that, for instance, man -H bash & will start the bash man page in a web browser in the background... well, that may be the case on your platform, but it's not universally true.
type manto ensure that it's actually defined in your current shell instance? Etc.-His supposed to be the name of your browser. I assume you'd wantman() { man -H /path/to/firefox "$@" & }, or such, instead.man -H ...anything... &is ever a thing you'd actually want to do.set -xto make your shell log what it's doing to stderr (or the file descriptor pointed at withBASH_XTRACEFDon 4.x, if you want to redirect it to a log file -- which is actually a good idea, ifmanis being invoked). If you think it's not actually running the function, put that command first, and see if that's true.