在一些现有的基于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的应用程序。我会让他知道他的代码是多余的,非常感谢你的确认。 –