Денис: нет ну как вы можете нажать во время работы цикла, если он выполняется за доли секунды. Вы даже скажем можете поместить в тело цикла setTimeout(func, 0) и она все равно выполнится по завершению цикла.
Денис: понимаете суть в том что когда вы уже после цикла нажимаете кнопку, переменная i обращается к глобальной переменной которая уже равна buttons.length