2

我意识到我可以用一个简单的测试项目来回答自己(如果没有人马上插话,我可以),但我在 SO 或谷歌上的任何地方都找不到答案,这似乎很关键:

如果我这样定义一个带有 require.js 的 AMD 模块:

//a.js
define( ['stuff'], function (Stuff) {
     return { thing: new Stuff() };
}

然后我在其他两个不同的模块中使用它:

// b.js
define( ['a'], function(a) {
    // do something with a's stuff 
});

// c.js
define( ['a'], function(a) {
  //do something else with a's stuff
}

每次我为另一个模块需要它时, 是否a会调用 's 定义函数(因此是一个新的实例化),或者它是否只被调用一次,并且它的输出被缓存?Stuff

显然,这在某些用例中至关重要,但从 require.js 文档或我见过的其他示例中并不清楚。

4

1 回答 1

7

我刚刚自己测试了这个,看起来构造函数只运行了一次。

// stuff.js
define(function() {
    return function() {
        console.log('making new!');
    };
});

// a.js
define( ['stuff'], function (Stuff) {
     return { thing: new Stuff };
});

// b.js
define( ['a'], function(a) {
});

// c.js
define( ['a'], function(a) {
});

// app.js
define(['b', 'c'], function() {
    console.log('app');
});

// index.html
<html>
<head>
    <script src='requirejs/require.js' data-main='app.js'></script>
</head>
</html>

当我打开 index.html 时,控制台显示:

making new!                             stuff.js:3
app                                       app.js:2
于 2012-06-08T14:38:14.243 回答