В вашей doфункции у вас есть аргумент функции с тем же именем, что и ваша глобальная переменная ( state). Это маскирует глобальную переменную. И все «родные» переменные (например, строки и числа) передаются по значению, а не по ссылке.
Простое исправление, просто полностью потеряйте аргумент. Затем вы будете работать с глобальной переменной.
do
                Также как в стороне, я действительно удивлен, что вы можете заставить этот код запускаться вообще, поскольку doэто ключевое слово в JavaScript . Я должен был изменить имя, чтобы даже запустить ваш код.