因为工做的缘由,使用angular1.x版本已经有一段时间了,虽然angualr2升级后就彻底重构了,但每一个版本存在也有必定的道理。话很少说,进入正题。ajax
AngualrJS的双向绑定基于脏检查机制,$scope上有一个监听队列,每当向视图上绑定一个值,就会向watch list中插入一个watch,当遇到能够被Angular context处理的事件,就会触发$digest循环,遍历全部的watch,更新DOM。app
UI发生变化,ajax请求,ng-click,$timeout...函数
$digest循环并非只运行一次的,一旦angualar运行整个$watch列表,若是任何值发生改变,应用程序将回退到$watch循环,直到它检测到没有任何更改。oop
不会,若是循环运行超过十次,angular会抛出异常,应用程序就会死掉。双向绑定
<button ng-click="">click</button>
会。code
会。blog
会。
关于以上三个问题的总结,一个绑定表达式只要放在当前 DOM 树里就会被监视,无论它是否可见,无论它是否被放在另外一个 Tab 里,更无论它是否与用户操做相关。队列
$apply会从rootScope上调用$digest事件
大体想到两种场景get
若有写的不正确的地方,欢迎留言讨论。参考文章The-Digest-Loop-and-apply