你可以这样理解 $rootScope 是最顶层的作用域,所有其他作用域(即 $scope)都在这个范围内。因此,如果您必须在范围之间传递值,那么您必须使用 $rootScope。
注意:function1 使用局部变量 Counter,其作用域在控制器内。 IE。每个控制器都有自己的范围。 function2 使用全局变量 Counter,因为没有定义全局变量。
在您的情况下(请记住角度支持双向绑定,因此每当全局值更改时,它会在所有位置更改),控制器按以下顺序调用 function1 -> function2 -> function1 -> function2。
当function1 第一次被调用时,$rootScope.Counter 不存在,因此它初始化为 1 并将其分配给局部变量 'Counter'。
so output look like
Global value is 1
Child Instance of Function1 created :- 1
Child Instance of Function2 created :- 1
Child Instance of Function1 created :- NA // local scope for this is not created
Child Instance of Function2 created :- 1
现在 function2 将被调用。这会将全局变量 Counter 增加到 2 并使用它来显示
so output look like
Global value is 2
Child Instance of Function1 created :- 1
Child Instance of Function2 created :- 2
Child Instance of Function1 created :- NA // local scope for this is not created
Child Instance of Function2 created :- 2
现在 function1 将再次被调用。这会将全局变量 Counter 增加到 3 并将其分配给局部变量。
so output look like
Global value is 3
Child Instance of Function1 created :- 1
Child Instance of Function2 created :- 3
Child Instance of Function1 created :- 3 //Because rootScope already have counter variable with 2
Child Instance of Function2 created :- 3
最后再次调用function2,这将全局变量Counter增加到4并使用它来显示
so output look like
Global value is 4
Child Instance of Function1 created :- 1
Child Instance of Function2 created :- 4
Child Instance of Function1 created :- 3
Child Instance of Function2 created :- 4