I am not too sure if this answers your question but maybe this will help you.
Scope data goes through a life cycle while the application is loaded in the browser.
The 5 Phases are
1) Creation- The root scope is created during the application bootstrap by the $injector. During template linking, directives(not all) create new child scopes.
2) Watcher Registration - During template linking directive registers watches on the scope. These watchers will be used to propagate model values to the DOM.
3) Model Mutation- For Mutations to be properly observed, you should make them only within the scope.$apply(). Angular API's do this implicitly , so no extra $apply call is needed when doing synchronous work in controllers , or async work with $http, $timeout or $interval services.
4) Mutation Observation- At the end of $apply(), Angular performs a $digest cycle on the $rootscope, which then propagates throughout all child scopes. During the $digest cycle, all $watched expressions or functions are checked for model mutation and if a mutation is detected, the $watch listener is called.
5) Scope Destruction- When child scopes are no longer needed , it is the responsibility of the child scope creator to destroy them via scope.$destroy()API. This is done in order to stop propagation of $digest calls into the child scope and allow for memory used by the child scope models to be reclaimed by the garbage collector.
I guess i somewhat tried answering your question towards the end. Hope it helps :)