Несколько причин.Функция setInterval
не всегда запускается ровно через 1000 миллисекунд;В конце концов, нет часов идеально.Кроме того, между каждыми 1000 миллисекундами ожидания должно учитываться время выполнения программы, которое, вероятно, составляет пару миллисекунд.Что касается дублирования времени, если время ожидания немного меньше секунды или дата JavaScript имеет небольшую задержку после фактического времени работы компьютера, тогда могут возникать дубликаты.Суть в том, что в среднем он будет выполняться каждые 1000 миллисекунд плюс время выполнения фактической функции.