title: angularjs watch is still being called after deregisterWatch
body: <p>I'm getting a very weird behavior and I would like to know if this is the expected one or something should be changed. I have a controller with the following piece of code:</p>
  
  <p>See demo here: <a href="http://fiddle.jshell.net/cqofLqwm/" rel="nofollow">http://fiddle.jshell.net/cqofLqwm/</a></p>
  
  <pre><code>UserSvc.refreshCyclic(20 * 1000);
  $scope.$on('userchanged', function onUserChanged(event, user) {
    stopWatchScopeUser();
    $scope.model.user = user;
    watchScopeUser();
  });
  
  function watchScopeUser() {
    stopWatchScopeUser = $scope.$watch('model.user', function scopeUserChanged(newValue, oldValue) {
      if (newValue !== oldValue) {
        console.log('user changed');
      }
    }, true);
  }
  
  watchScopeUser();
  </code></pre>
  
  <p><code>UserSvc.refreshCyclic</code> gets the user from server every 20 sec., and checks for <code>user</code> object changes. If there are changes, it raises <code>userchanged</code> event.</p>
  
  <p>What is happening here is that even after calling <code>stopWatchScopeUser()</code>, when assigning <code>user</code> to <code>$scope.model.user</code>, the watch expression is called with <code>newValue</code> equal to <code>oldValue</code>, both to the most recent user. (So the condition <code>newValue !== oldValue</code> fails).</p>
  
  <p>If I comment <code>stopWatchScopeUser</code> then the <code>scopeUserChanged</code> is called but <code>newValue</code> is different than <code>oldValue</code>.</p>
  
  <p>It's quite strange that after detaching the watch on <code>model.user</code>, it is still being called. Is this the normal behavior or there is something incorrect? What should I do to definitely deatach watch listener?</p>