我相信以下所有四種方法都可以使用,但我不清楚爲什麼有人會使用前三種方法,僅僅是因爲代碼更多。然而,第一個(也是最詳細的)是在RequireJS文檔中給出的。處理循環依賴關係
define "circular1", ["example1"], -> "circular1"
define "circular2", ["example2"], -> "circular2"
define "circular3", ["example3"], -> "circular3"
define "circular4", ["example4"], -> "circular4"
#1
define "example1", ["require", "circular1"], (require, circular) ->
alert "example1 Before: " + circular
circular = require "circular1"
alert "example1 After: " + circular
#2
define "example2", ["require"], (require) ->
alert "example2 Before: " + circular
circular = require "circular2"
alert "example2 After: " + circular
#3
define "example3", ["circular3"], (circular) ->
alert "example3 Before: " + circular
circular = require "circular3"
alert "example3 After: " + circular
#4
define "example4", [], ->
alert "example4 Before: " + circular
circular = require "circular4"
alert "example4 After: " + circular
require ["example1"], ->
require ["example2"], ->
require ["example3"], ->
require ["example4"], ->
- 如果
circularDependency
是走,直到你做了明確的require
爲undefined,有什麼煩心事,包括它的定義(#1 &#3)的點? - 而且如果
require
總是作爲第一個加載的腳本全局可用,爲什麼要將它傳入?這只是一個代碼清晰的問題,即。是否僅僅爲代碼頂部的所有依賴關係提供了一個簡潔的快照(因爲你可能實際上並沒有到達明確的require
,直到很久以後?或者它是否對RequireJS的優化方式有實際影響取決於是否它是不是包含在define
?
我不想使用這些變化,如果對我的軟件產生負面影響,只是因爲它「作品」。
謝謝。當我在jsFiddle中嘗試這種方式時,我終於找出了困難的方式,即在同一個文件中(即上下文)讓事情失敗,本該工作。正如你所說的,關鍵在於你必須在需要之前加載模塊。我仍然好奇爲什麼#3在文檔中說「確定require作爲依賴關係,因此正確的上下文用於查找」時爲什麼會起作用。這似乎意味着#3可能導致使用不正確的上下文。 – neverfox
@neverfox:現在我閱讀了文檔片段,我意識到在我的答案中我錯過了一個重要的東西。我已經更新了我的回答來覆蓋它。 – icktoofay
非常全面的答案。謝謝! – neverfox