'this' vs $ scope em controladores AngularJS

NoSeção "Criar Componentes" da página inicial do AngularJS, existe este exemplo:

controller: function($scope, $element) {
  var panes = $scope.panes = [];
  $scope.select = function(pane) {
    angular.forEach(panes, function(pane) {
      pane.selected = false;
    });
    pane.selected = true;
  }
  this.addPane = function(pane) {
    if (panes.length == 0) $scope.select(pane);
    panes.push(pane);
  }
}

Observe como oselect método é adicionado a$scope, mas oaddPane método é adicionado athis. Se eu mudar para$scope.addPane, o código quebra.

A documentação diz que há de fato uma diferença, mas não menciona qual é a diferença:

Versões anteriores do Angular (pré 1.0 RC) permitiram que você usassethis de forma intercambiável com o$scope método, mas isso não é mais o caso. Dentro dos métodos definidos no escopothis e$scope são intercambiáveis ​​(conjuntos angularesthis para$scope), mas não de outra forma dentro do seu construtor do controlador.

Como é quethis e$scope trabalhar em controladores AngularJS?

questionAnswers(7)

yourAnswerToTheQuestion