Understanding digest cycle

by cmyworld

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.16/angular.js"></script>
<div ng-app ng-controller='ctrl'>
    i: {{i}}<br>
    j: {{j}}<br>
    k: {{k}}<br>
    obj:{{obj}}
    <button ng-click='clickMe()'>Click Me</button>
</div>

JavaScript

function ctrl($scope,$timeout) {
    var obj1={id:1};
    var obj2={id:2};
    var obj3={id:3};
    var obj4={id:4};
    var obj5={id:5};
    var obj6={id:6};
    
    $scope.$watch("i", function (n, o) {
        console.log("i updated! ->" +n);
    });
    $scope.$watch("j", function (n, o) {
        console.log("j updated! ->" + n);
    });
    
    $scope.$watch("obj", function (n, o) {
        console.log("obj Data changed! ->" + JSON.stringify(n));
    });
    
    $scope.i=0;
    $scope.i++;
    $scope.i++;
    $scope.i++;
    $scope.i++;
    $scope.i++;
    $scope.i++;
    
    $scope.obj={};
    $scope.obj=obj1;
    $scope.obj=obj2;
    $scope.obj=obj3;
    $scope.obj=obj4;
    $scope.obj=obj5;
    $scope.obj=obj6;
    
    $scope.j=0;
    for(var i=0;i<5000000;i++) $scope.j++;
    
    $scope.k=0;
    
    setInterval(function() {
        $scope.k++;
    },1000);
    
    $scope.clickMe=function() {
        
    };
    
}