Потому что ангуляр внедряет зависимости по именам аргументов. А некоторые минификаторы и компиляторы изменяют имена аргументов. В итоге всё ломается. Первый вариант используется, чтобы явно задать список имён зависимостей для внедрения.
А вообще, по-нормальному используют либо такой вариант:
angular.module('app').controller('FooController', FooController);
FooController.$inject = ['$service1', '$service2'];
function FooController($service1, $service2) {}
Либо берут
это, настраивают свой сборщик (плагинов там куча) и вставляют определённый коммент где нужно:
angular.module('app').controller('FooController', FooController);
/*@ngInject*/
function FooController($service1, $service2) {}