Creating a new function for every tail call seems a bit awful. It's a shame that the more performant alternatives are ridiculously ugly.
On the other hand, we do a lot of wrapping things in functions in JS-land, so this probably says more about the state of the art than anything.
But generally, you want tail recursion...