JavaScript中Require调用js
1、函数全写在全局环境中,项目很小时,通常不会有什么冲突问题。但代码多了后,渐渐就发现,函数名称(英文词汇)有点不够用了。于是引入命名空间的概念,开始模块化代码。命名空间下的函数在命名空间下,代码这样写:

3、把模块分两种。无依赖的模块假如一个模块并不依赖其他模块,那么定义起来是很简单的,比如模块 hello 放在 hello.js 文件中:

5、这里,依赖中的 'jquery' 是模块相对于 baseUrl 的路径,等效于模块 ID。现在,再回过头,看看上面写过的闭包中导入公共 API 的代码,跟 define 函数做个对比:

7、这样的定义形式的好处是,模块不可能冲突,因为同一目录下不允许同名文件。但也因此 require.js 建议我们不要设置模块名称,因为设置了 ‘libs/hi' 的模块名称后,模块就必须放在 js/libs 目录下的 hi.js 文件中,要移动位置的话,模块名称要跟着改变。至于后期利用 r.js 优化时生成了模块名称,那已经是另外一回事。使用模块在定义好「有依赖」、「没依赖」的各种模块后,我们该怎么用它?Require.js 提供了一个函数,require(与 requirejs 等效)。require 函数加载依赖并执行回调,与 define 不同的是,它不会把回调结果4注册成模块:

9、写完 shim,发现 jquery-1.4.1、libs/jquery-throttle-debounce.min 这样的名称有点长。这里我们又有两种选择,一是直接打开修改 js 文件名,或者使用 require.js 提供的配置项 paths 给模块 ID 指定对应的真实文件路径:

11、其他模块在做 shim 时同理,比如 underscore 需要 exports 成 _。Require.js 的好处说了这么多,Require.js 到底有什么好处?并行加载<script></script> 标签会阻塞页面,加载 a.js 时,后面的所有文件都得等它加载完成并执行结束后才能开始加载、执行。而 require.js 的模块可以并行下载,没有依赖关系的模块还可以并行执行,大大加快页面访问速度。不愁依赖在定义模块的时候,就已经决定好模块的依赖 – c 依赖 b,b 又依赖 a。想用 c 模块的功能时,我只要在 require函数的依赖里指定 c:require(['c'], function(c) {...});至于 c 依赖的模块,c 依赖的模块的依赖模块… 等等,require.js 会帮打理。而传统的 script 办法,必须明确指定所有依赖顺序:
