Tem certeza que são iguais? :)
Tem certeza que todos estão incompletos? :)
Vejamos:
1) angular.module('alurapic').controller('a', function($http, $scope) {});
Esta correta, porque para injetarmos artefatos precisamos passar o nome dos artefatos que serão injetados na função passada como segundo parâmetro para a função controller
.
3) angular.module('alurapic').controller('c', function($scope, $http) {});
Correto, apesar de parecida com 1, ela inverte a ordem dos parâmetros. Quem saca de JavaScript pode achar que vai dar erro, mas não dá porque angular se baseia no nome do parâmetro e não na posição.
Agora vamos para as erradas:
2) angular.module('alurapic').controller('b', $http, $scope) {};
Errada, os artefatos que serão injetados não foram passados como parâmetros para function, faltou function ($http, $scope) {}
.
Por fim,
4) angular.module('alurapic').controller('d', function($scope, http) {});
Ela até injeta corretamente $scope
, mas não injeta $http
porque o parâmetro passado foi http
e não $http
.