code: function(){
      if(this.$phase === 'digest' || this._mute) return;
      this.$phase = 'digest';
      var dirty = false, n =0;
      while(dirty = this._digest()){
  
        if((++n) > 20){ // max loop
          throw Error('there may a circular dependencies reaches')
        }
      }
      // stable watch is dirty
      var stableDirty =  this._digest(true);
  
      if( (n > 0 || stableDirty) && this.$emit) {
        this.$emit("$update");
        if (this.devtools) {
          this.devtools.emit("flush", this)
        }
      }
      this.$phase = null;
    }
docs: the whole digest loop ,just like angular, it just a dirty-check loop;
  @param  {String} path  now regular process a pure dirty-check loop, but in parse phase,
  Regular's parser extract the dependencies, in future maybe it will change to dirty-check combine with path-aware update;
  @return {Void}