code: function(isolate) {
          var Child,
              child;
  
          if (isFunction(isolate)) {
            // TODO: remove at some point
            throw Error('API-CHANGE: Use $controller to instantiate controllers.');
          }
          if (isolate) {
            child = new Scope();
            child.$root = this.$root;
          } else {
            Child = function() {}; // should be anonymous; This is so that when the minifier munges
              // the name it does not become random set of chars. These will then show up as class
              // name in the debugger.
            Child.prototype = this;
            child = new Child();
            child.$id = nextUid();
          }
          child['this'] = child;
          child.$$listeners = {};
          child.$parent = this;
          child.$$asyncQueue = [];
          child.$$watchers = child.$$nextSibling = child.$$childHead = child.$$childTail = null;
          child.$$prevSibling = this.$$childTail;
          if (this.$$childHead) {
            this.$$childTail.$$nextSibling = child;
            this.$$childTail = child;
          } else {
            this.$$childHead = this.$$childTail = child;
          }
          return child;
        }
docs: @ngdoc function
  @name ng.$rootScope.Scope#$new
  @methodOf ng.$rootScope.Scope
  @function
  
  @description
  Creates a new child {@link ng.$rootScope.Scope scope}.
  
  The parent scope will propagate the {@link ng.$rootScope.Scope#$digest $digest()} and
  {@link ng.$rootScope.Scope#$digest $digest()} events. The scope can be removed from the scope
  hierarchy using {@link ng.$rootScope.Scope#$destroy $destroy()}.
  
  {@link ng.$rootScope.Scope#$destroy $destroy()} must be called on a scope when it is desired for
  the scope and its child scopes to be permanently detached from the parent and thus stop
  participating in model change detection and listener notification by invoking.
  
  @param {boolean} isolate if true then the scoped does not prototypically inherit from the
  parent scope. The scope is isolated, as it can not se parent scope properties.
  When creating widgets it is useful for the widget to not accidently read parent
  state.
  
  @returns {Object} The newly created child scope.