模块不一样于传统的脚本文件,它良好地定义了一个做用域来避免全局名称空间污染。它能够显式地列出其依赖关系,并以函数(定义此模块的那个函数)参数的形式将这些依赖进行注入,而无需引用全局变量。RequireJS的模块是模块模式的一个扩展,其好处是无需全局地引用其余模块。 RequireJS的模块语法容许它尽快地加载多个模块,虽然加载的顺序不定,但依赖的顺序最终是正确的。同时由于无需建立全局变量,甚至能够作到在同一个页面上同时加载同一模块的不一样版本。javascript
use strict --严格模式,这种模式使得Javascript在更严格的条件下运行。php
其实就是把文件名称做为name参数传入,若依赖该组件那么返回的就是一个对象!css
define({ name: "hehe", age: "18" });
和上面同样文件名称做为默认的name,与上面的差别是,能够提早执行返回值外的代码java
define(function() { return { name: "hehe", age: "18" }; });
define([
'angular', 'jsUtil', 'modules/meet/modules', 'modules/meet/services/Meet', 'modules/meet/services/MeetRemoteService' ],function(require) { 'use strict'; var module = angular.module('meet.services'); module.factory('MeetService', function(Meet, MeetRemoteService) { var service = { name: 'hehe', age: '18' }; return service; }); });
和上面同样,关键是依赖模块是以返回值做为入参的形式传入,若是加载错误或者没有找到对应的模块,那么获得的入参是Undefiend,须要注意!node
define([
'angular', 'jsUtil', 'modules/meet/modules', 'modules/meet/services/Meet', 'modules/meet/services/MeetRemoteService' ],function(require) { 'use strict'; var module = angular.module('meet.services'); module.factory('MeetService', function(Meet, MeetRemoteService) { var service = {}; service.getWeekOfMeet = function(weekFlag, date) { return MeetRemoteService.get(weekFlag, date).then(function(data) { data.content = Meet.sortMeet(data.content); return data; }); } return service; }); });
和上面同样,这里返回的是函数,在依赖模块中把他做为函数对象调用便可,其实这是一个简单的闭包!数组
define('sample3' ,['sample','sample1'],function (sample,sample1) { var sample4 = require('sample4'); return function(){ alert(sample.name+':'+sample.sayhell()); } });
这就是完整定义,有名称,有依赖,有回调,内部还有common的形式引入依赖对象!安全
define(name,[] , callback); 这个name能够省掉,默认是文件名称;固然也能够自定义,一旦咱们定义了name,根据源代码咱们能够发现define函数内部其实就是把这个name以及依赖模块、回调函数做为一个对象存储在全局的数组当中,也就是 defQueue.push([name,deps,callback]);那么这个name就是这个组件注册的的ID!闭包
require([name , name2],callback); 系统首先会在全文检索path中是否对应的路径,若是没有天然把他做为路径拼接在baseUrl上去异步加载这个js文件,加载时从源代码中能够看到 ,var data = getScriptData(evt);返回的 data.id 其实就是name,而后执行contex.completeLoad(node.id),其内部就很清楚了,把define中注册的name和这里获得的name进行比较若是相等就执行。因此道理就是:require 和 define 的 name 必须保证一致!异步