2

最初はこのパターンを理解するのに長い時間がかかりましたが、それは主に次のように書かれているためだと思います。

(function(root, factory) {
    // Export MyModule depending on the environment
    if (typeof define === "function" && define.amd) {
        define("MyModule", [], factory);
    } else {
        root.MyModule = factory();
    }
}(this, function() {
    return { 
        // Module definition
    };
}));

まさにこれと同じではないか。

(function(root) {
    var factory = function() {
        return { 
            // Module definition
        };
    };
    // Export MyModule depending on the environment
    if (typeof define === "function" && define.amd) {
        define("MyModule", [], factory);
    } else {
        root.MyModule = factory();
    }
}(this));

現在は var ステートメントがありますが、これははるかに読みやすいと思います。ここで何か不足していますか?最初のアプローチを使用する正当な理由はありますか?

4

1 に答える 1

2

まさにこれと同じではないか。

正確ではありません-これらrootfactory変数はモジュール定義のスコープ内にあり、クロージャーレベルが1つ深くなります。そして、これには重大な欠点がfactoryあります。最初のパターンでは本当に匿名でしたが、(些細なことですが)もはやガベージコレクションできません。

私はこれがはるかに読みやすいと思います

同意しません。AMD と UMD は、ファクトリで呼び出される単一の「定義」ラッパーを中心に解決します。この場合、ファクトリ関数のコンテンツは興味深いもの (ファイルの「メイン」コンテンツ) であり、定義呼び出しはヘッダーにすぎません。これは、ヘッダーが縮小されて 1 行しかない場合に特に顕著になります。
対照的に、提案された代替案では、モジュールはその IEFE のどこか深いところに隠されています。通常よりも 1 レベル多くインデントする必要さえあります。

于 2015-07-23T01:56:53.517 に答える