assertNotHasOwnProperty = function(name, context) {
        if (name === 'hasOwnProperty') {
          throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context);
        }
      }
@ngdoc function
@name angular.module
@module ng
@description

The `angular.module` is a global place for creating, registering and retrieving AngularJS
modules.
All modules (AngularJS core or 3rd party) that should be available to an application must be
registered using this mechanism.

Passing one argument retrieves an existing {@link angular.Module},
whereas passing more than one argument creates a new {@link angular.Module}


# Module

A module is a collection of services, directives, controllers, filters, and configuration information.
`angular.module` is used to configure the {@link auto.$injector $injector}.

```js
// Create a new module
var myModule = angular.module('myModule', []);

// register a new service
myModule.value('appName', 'MyCoolApp');

// configure existing services inside initialization blocks.
myModule.config(['$locationProvider', function($locationProvider) {
  // Configure existing providers
  $locationProvider.hashPrefix('!');
}]);
```

Then you can create an injector and load your modules like this:

```js
var injector = angular.injector(['ng', 'myModule'])
```

However it's more likely that you'll just use
{@link ng.directive:ngApp ngApp} or
{@link angular.bootstrap} to simplify this process for you.

@param {!string} name The name of the module to create or retrieve.
@param {!Array.<string>=} requires If specified then new module is being created. If
       unspecified then the module is being retrieved for further configuration.
@param {Function=} configFn Optional configuration function for the module. Same as
       {@link angular.Module#config Module#config()}.
@returns {angular.Module} new module with the {@link angular.Module} api.