在一些現有的基於Dojo的應用程序,我現在用的是形式的單例模式看到一個模塊:Dojo AMD loader確保模塊只執行一次?
define([...], function(...) {
var MyClass = declare(...);
if (!_instance) {
var _instance = new MyClass();
}
return _instance;
});
但是,如果我理解正確的AMD,則不需要_instance的使用,因爲函數傳遞給define(...)調用應該只執行一次...或者可能不是?
我對AMD加載器的理解是,當通過調用「require」或「define」來獲取模塊時,它會檢查模塊是否已經加載。如果尚未加載,它將加載JS,執行傳遞給「define」的函數,並在內部存儲返回的值。如果它已經被加載,它將簡單地返回先前存儲的值。
我的假設是否正確?如果是這樣,在編寫模塊時,我們可以安全地假設給定的模塊只會被加載和執行一次,並且我們不需要執行任何檢查以查看是否已經初始化某個模塊,從而使代碼更簡單。
謝謝。
你的假設是正確的,該代碼假定的身體可能再次運行,這是完全錯誤的。我可以問你在哪裏看到這個,如果它是在dojo/dijit代碼中,而不是當然是你自己的/生產代碼。 –
不,這不是Dojo/Dijit代碼,它是由同事編寫的一些基於dojo的應用程序。我會讓他知道他的代碼是多餘的,非常感謝你的確認。 –