Причина в том, что при
var i продолжает существовать после итерации, так как поднимается в глобальный контекст и во всех случаях вызова слушателя берется последнее значение
i, а оно в вашем случае равно
length, а это выход за индекс массива
videos и как следствие исключение и остановка выполнения приложения. В случае с
let переменная используется локально, перестает существовать поле итерации, а на момент вызова слушатель использует значение полученное в момент итерации.
Вот песочница
https://jsfiddle.net/m97rsq0a/
Понажимайте кнопки, посмотрите консоль, а потом замените
var на
let и попробуйте снова.
Думаю поймете суть.