したがって、次のようなモジュールがある場合:
//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 について興味深いと思われるその他の落とし穴があれば、自由に投稿してください。