2012-02-29 141 views

回答

314

With define您在require.js中注册了一个模块,然后您可以依赖其他模块定义或需要语句。 使用require您只需加载/使用可由require.js加载的模块或JavaScript文件。 对于例子看看在documentation

我的经验法则:

  • 定义:如果你要声明一个模块应用程序的其它部分将取决于。

  • 要求:如果你只是想加载和使用的东西。

319

从require.js source code(线1902):

/** 
* The function that handles definitions of modules. Differs from 
* require() in that a string for the module should be the first argument, 
* and the function to execute after dependencies are loaded should 
* return a value to define the module corresponding to the first argument's 
* name. 
*/ 

define()函数接受两个可选参数(即表示模块ID和所需的模块的阵列的串)和一个必需的参数(工厂方法)。

工厂方法的返回必须返回您的模块的实现(以与Module Pattern相同的方式)。

require()函数不必返回新模块的实现。

使用define()你问像“跑,我作为参数传递的功能,并指定任何返回给我传球,但是,之前的ID,检查这些依赖加载”

使用require()你说像“我通过具有以下依存关系的功能,检查这些依赖运行前加载”

require()函数是您使用您定义的模块的地方,以确保模块已定义,但您并未在其中定义新模块。

+1

对于在define'd模块内使用require还是在外部使用require有任何区别?如果在模块内部使用它,为什么不直接在模块定义中设置需求而不是使用require? – Petri 2014-01-28 06:48:33

+0

为什么这个答案如此不同于我在这里阅读的http://requirejs.org/docs/api.html#deffunc ?? – 2014-02-13 18:44:02

+1

@Petri,听起来像你看到RequireJS的异步加载模块的版本2行为。 “RequireJS 2.0不会执行模块的工厂函数(该函数传递给'define()'),直到有一个要求([])'调用请求它或者依赖于它的东西。” https://github.com/jrburke/requirejs/wiki/Upgrading-to-RequireJS-2.0#delayed – alxndr 2014-08-18 16:55:17

1

“定义”方法用于促进模块定义 和 “规定”,用于处理依赖装载

定义用于基于使用以下签名的提议以限定指定或未指定的模块方法:

define(
module_id /*optional*/, 
[dependencies] /*optional*/, 
definition function /*function for instantiating the module or object*/ 
); 

另一方面要求通常用于在顶级JavaScript文件或模块内加载代码,如果您希望动态获取相关性

有关更多信息,请参阅https://addyosmani.com/writing-modular-js/

1

require()和define()都用来加载依赖关系。这两种方法之间有一个主要区别。

它非常简单,大家好

要求()方法用于立即运行功能。 define():方法用于定义在多个位置使用的模块(重用)。

相关问题