我有代码片段,其中有一个Angular Modular Controller,但是在同一个控制器内部有一个函数并且有一个调用,这在我的脑海中引起了怀疑,这是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中允许的控制器内调用?
答案 0 :(得分:72)
calculate()
是一个私有函数 - 只能在CartController
范围内访问。如果您不需要在视图中使用您的功能,最好将其设为私有。它表示要在视图中使用不,因此如果其他人将使用此代码,请在视图中使用它之前再三思。此外:从calculate
开始,您可以访问CartController
范围内可访问的所有对象(包括作为参数传递给CartController
的对象)。
以这种方式声明的函数是一个合适的JS function
,这意味着您可以通过其名称来引用它。有时,如果您提前声明/创建函数并将其分配给其他对象的属性(在本例中为$scope
),则认为它更具可读性:
function someFn (...) { ... }
function someOtherFn (...) { ... }
...
$scope.someFn = someFn
在上面的代码段中,意图非常明确:可以访问someFn
,同时保持someOtherFn
私有。
顺便说一下。声明像function nameFn(...){...}
这样的函数被称为函数语句;您可以非常类似地执行此操作:var nameFn = function(...) {...}
(所谓的函数表达式)。这些之间略有不同 - 基本上它是非法的:
someFn();
var someFn = function(...) {...}
然而,这有效:
someFn();
function someFn(...) {...}
答案 1 :(得分:4)
$scope.launch = function (which) {
};
var _func = function () {...}
答案 2 :(得分:1)
允许定义,它与
具有相同的效果$scope.$watch($scope.totalCart, function(){..some logic...})