Ответ 1
Все часы оцениваются (иногда несколько раз) каждый цикл дайджеста. Цикл дайджеста вводится в результате какого-либо события или вызывает $apply(). Часы не вызывают периодически на основе таймера.
См. https://docs.angularjs.org/guide/scope#integration-with-the-browser-event-loop
Цикл событий браузера ожидает прибытия события. Выполняется обратный вызов события... После выполнения обратного вызова браузер покидает контекст JavaScript и повторно отображает представление, основанное на изменениях DOM. Angular изменяет нормальный поток JavaScript, предоставляя свой собственный цикл обработки событий. Это разбивает JavaScript на классический и Angular контекст выполнения... Angular выполняет [some] stimulusFn(), который обычно изменяет состояние приложения. Angular вводит цикл $digest. Цикл состоит из двух небольших циклов, которые обрабатывают очередь $evalAsync и список $watch. Цикл $digest продолжает повторяться до тех пор, пока модель не стабилизируется, а это означает, что очередь $evalAsync пуста, а список $watch не обнаруживает никаких изменений. $Watch list - это набор выражений, которые могут измениться с последней итерации. Если обнаружено изменение, вызывается функция $watch, которая обычно обновляет DOM с новым значением.