質問: dojo 1.7 AMDフレームワークのメリットは何ですか? 私はdojo 1.7ローダーがAMD API /フレームワークをどのように使用しているかについて読んできました。ここ こちらもこちらのスライドの1つにこの引用文があります。「AMD(s )最大の利点は、オンデマンドでスクリプトを読み込むことができないということです。コードの構成/モジュール性の向上とグローバル/ネームスペースの必要性の減少が最大のメリットといえます。しかし、私の質問は、他の関数の実行コンテキスト(と別の関数の 'プライベート'変数)にアクセスする必要がある場合は、通常のjs関数を使用してグローバル変数を避けることはできませんか、おそらくdojo.hitch()ですか?別の方法として、必要なものだけを非同期にロードする以外に、AMDフレームワークのメリットは何ですか?
回答: AMDの利点は、他の言語のネームスペースシステムに似た*モジュールシステム*を持つ利点です。 JavaScriptでは、これをグローバル変数で偽装することがよくありましたが、モジュールはいくつかの特典を提供します: > これらのモジュールは、トップスコープのプライバシー、他のモジュールからシングルトンオブジェクトをインポートする機能、独自のAPIをエクスポートする機能を提供します。 > > ---すべてを開始した CommonJSモジュール/ 1.1.1仕様から。 ここでの重要なのは、輸出入施設です。これまでは、誰もがグローバル( `window.jQuery` 、 `window ._` など)を使ってこの特別な作業を行っていました。 jQueryのエクスポートされた機能を利用するには、魔法の名前を知っていて誰もそれと矛盾しないようにして、スクリプトの前にjQueryスクリプトが読み込まれていることを確認しなければなりません。宣言的にjQueryへの依存関係を指定する方法はありませんでした。jQueryは、グローバルな `window.jQuery` オブジェクトに「これは私がエクスポートしたもの」という言葉を詰め込むだけではありません。 モジュール形式はこれを修正します:各モジュールは特定の関数をエクスポートします。 ``` // math.js define(function (require, exports, module) { exports.add = function (a, b) { return a + b; }; }); ``` 各モジュールは特定の他のモジュールを必要とすることができる。 ``` // perimeter.js define(function (require, exports, module) { var math = require("math"); exports.square = function (side) { return math.add(math.add(side, side), math.add(side, side)); }; }); ``` なぜAMDが選択のモジュールシステムでなければならないのか、 RequireJS の著者James Burke --- AMDローダーDojoは--- ブログ投稿に理由を詳しく説明しました彼はAMDが最高だと思っています。