В чём отличие от присваивания a = requestAnimationFrame(anim) и от обычного вызова requestAnimationFrame(anim)?
только в том, что сохранили значение, которое возвращает вызов. Для этой функции это значение некий уникальный id, по которому, при необходимости, можно отменить вызов через
cancelAnimationFrame(), но в приведённом коде это значение никак не используется.
Почему идёт каждый раз вызов функции anim()
Первый раз потому, что в конце кода стоит вызов
requestAnimationFrame(). Последующие — потому, что в конце очередной отработки anim() есть вызов
a = requestAnimationFrame(anim); при условии, что счётчик не превышен.