2012-02-29 139 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():方法用於定義在多個位置使用的模塊(重用)。

相關問題