You don't need tail calls in JavaScript in order have them in a language that compiles to JS. The tail call can be compiled as a while loop. This is what Scala does on the JVM (and presumably what Scala.js does as well).
This only works with calls that can be resolved at compile time (unless you mean a trampoline). That happens to be most of the common use, which is great, but it's not perfect.
Trampolines still work, albeit with a pretty substantial perf penalty.
Trampolines still work, albeit with a pretty substantial perf penalty.