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