我已经问过类似的问题:Requirejs,它是什么意思“Requirejs 加载每个模块一次”
但是在那个主题中没有人回答主要问题,因为我问错了。
所以我将提供一些简单的例子来说明我的意思:
模块 counter.js
1: define([], function() {
2: console.log("Executing counter");
3: var counter = 0;
4:
5: return {
6: increment: function() { counter++; },
7: get: function() { return counter; }
8: };
9: });
模块 test1.js
1: define(['counter'], function(counter) {
2: console.log("Executing test1");
3: counter.increment();
4: });
模块 test2.js
1: define(['counter'], function(counter) {
2: console.log("Executing test2");
3: counter.increment();
4: });
主.js
1: require(['test1', 'test2', 'counter'], function(test1, test2, counter) {
2: console.log("Executing main");
3: alert(counter.get());
4: });
所以模块 main.js 是应用程序的入口点,它将首先加载依赖项“test1”、“test2”和“counter”。(执行顺序:执行counter,执行test1,执行test2,执行main)
因此,如果我理解句子“Requirejs 加载每个模块一次”,这意味着(例如 counter.js)从第 1 行到第 9 行的代码将只执行 一次,除了 test1、test2 和主模块在其依赖项列表中有计数器之外?如果这是正确的,test1 是“负责”执行计数器模块吗? 如果这是正确的,在执行计数器之后,内存中将只有一个从计数器返回的对象?当 test2 加载计数器时,它会得到那个 ONE 对象吗?(换句话说,test2 不会再次执行来自计数器的代码,它们将使用现有的计数器对象)? 那么,我在这里创建 SINGLETON 吗?
最后,所有模块都可以通过函数(增量,获取)闭包来影响计数器值(开始时,计数器 = 0)? 当内存中存在计数器对象时,闭包会存活吗?