It's a recursive tail call. It should run forever, like the following Scheme code.
(define (foo) (foo))
(foo)
(define (foo) (foo))
(foo)
The main problem is still that Chrome and Firefox don't support tail call elimination. Babel (6to5) and Traceur do.