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.$$destroyed = false;
      this.$$asyncQueue = [];
      this.$$postDigestQueue = [];
      this.$$listeners = {};
      this.$$listenerCount = {};
      this.$$isolateBindings = {};
    }
@ngdoc function
@name ng.$rootScope.Scope

@description
A root scope can be retrieved using the {@link ng.$rootScope $rootScope} key from the
{@link AUTO.$injector $injector}. Child scopes are created using the
{@link ng.$rootScope.Scope#methods_$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>
<file src="./test/ng/rootScopeSpec.js" tag="docs1" />
</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>


@param {Object.<string, function()>=} providers Map of service factory which need to be
                                      provided for the current scope. Defaults to {@link 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.