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