Как работает функция часов AngularJS $?

Я читаю много о AngularJS в наши дни, и я наткнулся на эту волшебную функцию $watch. Я понимаю, как его использовать, но мне интересно, как это реализовано в фоновом режиме. Это функция интервала времени? Или это Angular, вызывающий эти часы, каждый оператор выполнен?

Я не хочу вдаваться в исходный код прямо сейчас, и я был бы рад, если бы кто-то из вас уже знал ответ и хотел поделиться своими знаниями о предмете.

Спасибо.

Ответ 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 с новым значением.

enter image description here