A module in RequireJS is a scoped object and is not available in the global namespace. Hence, global namespace will not be polluted. RequireJS syntax allows to load modules faster without worrying about keeping track of the order of dependencies. You can load multiple versions of the same module in the same page.
Module is defined using the define() function; the same function is used for loading the module as well.
If the module is just a collection of name and value pairs, then you can use the following syntax −
define({ state: "karnataka", city: "bangalore" });
A module can also use a function for frameworks, without having dependencies. This can be done by using the following syntax −
define(function () { //Do setup work here return { state: "karnataka", city: "bangalore" } });
If the module is having dependencies, the placement of the first argument (array of dependency names), the second argument (defining function) and the return object that defines the module is shown in the following syntax −
define(["./mnc", "./startup"], function(mnc, startup) { return { state: "karnataka", city: "bangalore", addCompany: function() { mnc.decrement(this); startup.add(this); } } } );
It is not mandatory for a module to return only objects, any valid value from a function can also be returned. The following syntax is used to define a module as a function −
define(["./mnc", "./startup"], function(mnc, startup) { return function(title) { return title ? (window.title = title) : startup.storeName + ' ' + mnc.name; } } );
In some cases you may have to include a name for the module as the first argument to define(). This can be done by using the following syntax −
define("js2/title", ["js1/mnc", "js1/startup"], function(mnc, startup) { //Define js2/title object in here. } );