1

したがって、次のようなモジュールがある場合:

//test1.js
define([], function() {
    var counter = 0;

    return {
        increment: function() { counter++ }
    };
});

Requirejs はこのモジュールを 1 回ロードし (このモジュールのローカル変数を認識するため)、二度とロードしませんか? 変数カウンターは、オブジェクトを返すことからのクロージャーによって (インクリメント関数を介して) 有効になりますか?

次の例はどうですか?

//test2.js
define([], function() {
    var value = 10;

    document.getElementById('asd').addEventListener('mousedown', function(e) {
        value = Math.random();
    });

    return value;
});

このコードの構造では、requirejs がこれを 1 回だけロード/実行するため、このイベントはトリガーされませんか? ここでエクスポートされた値は 10 になり、これまで変更できませんか? したがって、この例では、解決策が1つしかなく、それはこのモジュールから関数を返すことです(比喩的に言えば、「このモジュールを複数回実行する」などの効果が必要な場合)?

それで、これは正しい方法ですか?

//test3.js
define([], function() {
    return function() {
        return Math.random();
    };
});

//test4.js
define(['test3'], function(test) {
   document.getElementById('asd').addEventListener('mousedown', function(e) {
        alert(test());
   });
});

Requirejs について興味深いと思われるその他の落とし穴があれば、自由に投稿してください。

4

2 に答える 2