function Scope() {
      this.$id = nextUid();
      this.$$phase = this.$parent = this.$$watchers =
                     this.$$nextSibling = this.$$prevSibling =
                     this.$$childHead = this.$$childTail = null;
      this['this'] = this.$root =  this;
      this.$$asyncQueue = [];
      this.$$listeners = {};
    }
@ngdoc function
@name angular.module.ng.$rootScope.Scope

@description
A root scope can be retrieved using the {@link angular.module.ng.$rootScope $rootScope} key from the
{@link angular.module.AUTO.$injector $injector}. Child scopes are created using the
{@link angular.module.ng.$rootScope.Scope#$new $new()} method. (Most scopes are created automatically when
compiled HTML template is executed.)

Here is a simple scope snippet to show how you can interact with the scope.
<pre>
        angular.injector(['ng']).invoke(function($rootScope) {
           var scope = $rootScope.$new();
           scope.salutation = 'Hello';
           scope.name = 'World';

           expect(scope.greeting).toEqual(undefined);

           scope.$watch('name', function() {
             this.greeting = this.salutation + ' ' + this.name + '!';
           }); // initialize the watch

           expect(scope.greeting).toEqual(undefined);
           scope.name = 'Misko';
           // still old value, since watches have not been called yet
           expect(scope.greeting).toEqual(undefined);

           scope.$digest(); // fire all  the watches
           expect(scope.greeting).toEqual('Hello Misko!');
        });
</pre>

# Inheritance
A scope can inherit from a parent scope, as in this example:
<pre>
         var parent = $rootScope;
         var child = parent.$new();

         parent.salutation = "Hello";
         child.name = "World";
         expect(child.salutation).toEqual('Hello');

         child.salutation = "Welcome";
         expect(child.salutation).toEqual('Welcome');
         expect(parent.salutation).toEqual('Hello');
</pre>

# Dependency Injection
See {@link guide/dev_guide.di dependency injection}.


@param {Object.<string, function()>=} providers Map of service factory which need to be provided
    for the current scope. Defaults to {@link angular.module.ng}.
@param {Object.<string, *>=} instanceCache Provides pre-instantiated services which should
    append/override services provided by `providers`. This is handy when unit-testing and having
    the need to override a default service.
@returns {Object} Newly created scope.