Moduł ładowania raz, wymaga przykładów
Już zadałem podobne pytanie:Requirejs, co to znaczy „Requirejs ładuje każdy moduł raz”
ale w tym temacie nikt nie odpowiada na główne pytanie, ponieważ zapytałem w niewłaściwy sposób.
Podam więc kilka prostych przykładów, aby pokazać, co mam na myśli:
Counter.js modułu
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: });
Moduł test1.js
1: define(['counter'], function(counter) {
2: console.log("Executing test1");
3: counter.increment();
4: });
Moduł 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: });
Więc moduł main.js jest punktem wejścia aplikacji, która najpierw załaduje zależności „test1”, „test2” i „licznik”. (Wykonywanie zamówienia: licznik wykonawczy, wykonanie testu1, wykonanie testu2, wykonanie główne)
Jeśli więc rozumiem zdanie „Requirejs ładuje każdy moduł raz”, oznacza to, że wykonywany będzie kod (na przykład counter.js) z linii od 1 do 9TYLKO RAZ poza tym, że test1, test2 i główny moduł mają licznik na liście zależności? Jeśli to prawda,test1 jest „ładowany” do wykonania modułu licznika? A jeśli to prawda, po wykonaniu licznika w pamięci będzieTYLKO JEDEN obiekt, który zostanie zwrócony z licznika? Kiedy licznik obciążenia test2 otrzyma JEDEN obiekt? (w innym słowie test2 nie wykona ponownie kodu z licznika ani głównego, będą używać istniejącego obiektu licznika)?Więc, czy tworzę tutaj SINGLETON?
W końcu wszystkie moduły mogą wpływać na wartość licznika (na początku, licznik = 0) poprzez funkcje (przyrost, get) zamknięcia?Zamknięcia będą żywe, podczas gdy obiekt licznika istnieje w pamięci?