What is the difference between $scope.$root and $rootScope?

angularjs, angularjs-scope, javascript

Solution

`$rootScope` var which points to the parent of all the scopes and can be injected everywhere. All other scopes are children of the `$rootScope`. They are created via the `$new` method of the `$rootScope` thus every scope inherits from the `$rootScope`.

In the angular source in the definition of the `Scope` constructor there is a line :

 function Scope() {
   this.$id = nextUid();
 ...
 this['this'] = this.$root =  this;
 ...

It seems the `$root` var is just a placeholder for `this` of the first scope created - `$rootScope`.

Next there is this piece of code in the `$new` method:

  $new: function(isolate) {
      ...

    if (isolate) {
      child = new Scope();
      child.$root = this.$root;
   ...
   return child;

So the `$root` var of every scope child of `$rootScope` is a reference to `$rootScope`. And all the children of those children will get the same reference to `$rootScope`

In my opinion it is better to use the `$rootScope` via dependency injection because it is an explicit and overall more frequently used way of referring to the `$rootScope`

Problem

I see in controllers that $scope has $root, what is this? How is it different from $rootScope which can be injected in the controller?

Original source