В первом случае - при каждом вызове функции создаются новые переменные (локальные), и в функции-обработчике они доступны через
замыкание.
Во втором случае одни и те же (глобальные) переменные перезаписываются и функция обработчик знает только последнее их значение.
Теоретические основы тут:
https://doka.guide/js/closures/