【发布时间】:2013-10-02 16:37:44
【问题描述】:
我已经问过类似的问题:Requirejs, what it means "Requirejs loads each module once"
但在那个主题中,没有人回答主要问题,因为我问错了。
所以我将提供一些简单的例子来说明我的意思:
模块 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: });
Main.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 行的代码将被执行 ONLY ONCE 除了 test1、test2 和主模块在它们的依赖项列表中有计数器之外? 如果这是正确的,test1 正在“负责”执行计数器模块? 如果这是正确的,在执行计数器之后,内存中将是 ONLY ONE 对象,该对象将从计数器返回? 当 test2 加载计数器时,它会得到那个 ONE 对象吗? (换句话说,test2 不会再次执行来自 counter 的代码,它们将使用现有的 counter 对象)? 那么,我在这里创建 SINGLETON 吗?
最终所有模块都可以通过函数(increment, get) 闭包来影响计数器值(开始时,计数器 = 0)? 当计数器对象存在于内存中时,闭包仍然存在?
【问题讨论】:
标签: javascript requirejs