Подтвердить что ты не робот

Функция внутри контроллера AngularJS

У меня есть фрагмент кода, в котором есть модульный контроллер Angular, но есть функция внутри одного и того же контроллера и с вызовом, что вызывает у меня сомнения в том, что этот способ кодирования разрешен в Javascript или Angular? Если да, то как это читать? См. Ниже приведенный ниже формат кода:

obj.controller('CartController',function($scope){

  $scope.totalCart = function(){
    var total = 10;     
    return total;
  }
  function calculate(){
    ...Some Logic..
  }

  $scope.$watch($scope.totalCart, calculate);
)};

Пожалуйста, помогите мне понять, что это тип определения функции и вызов внутри контроллера, разрешенного в Angular/Javascript?

4b9b3361

Ответ 1

calculate() является частной функцией - доступ доступен только в области CartController. Если вам не нужно использовать вашу функцию в представлении, рекомендуется сделать ее закрытой. В нем говорится, что для представления в представлении используется не, поэтому, если кто-то другой будет работать с этим кодом, подумайте дважды, прежде чем использовать его в представлении. Кроме того: из calculate у вас есть доступ ко всем объектам, доступным в области CartController (включая объекты, переданные в CartController в качестве параметров).

Функция, объявленная таким образом, является правильным JS function, что означает, что вы можете получить ссылку на нее по ее имени. Иногда считается, что это более читаемо, если вы заранее объявляете/создаете свою функцию и только потом назначаете ее свойствам какого-либо другого объекта (в данном случае $scope):

function someFn (...) { ... }

function someOtherFn (...) { ... }

...

$scope.someFn = someFn

В приведенном выше фрагменте намерения очень ясны: сделайте someFn доступным, сохраняя someOtherFn частным.

Btw. объявление функций типа: function nameFn(...){...} называется выражением функции; вы можете очень точно сделать это: var nameFn = function(...) {...} (так называемое выражение функции). Между ними есть небольшая разница - в основном это незаконно:

 someFn();
 var someFn = function(...) {...}

тогда как это работает:

 someFn();
 function someFn(...) {...}

Иногда вы вынуждены использовать этот шаблон, посмотрите, например. на мой ответ на этот question.

Ответ 2

$scope.launch = function (which) {

};
var _func = function () {...}

Ответ 3

Определение разрешено, оно имеет тот же эффект, что и

$scope.$watch($scope.totalCart, function(){..some logic...})