14

SOの回答にリンクされているJavascriptコードを再利用しようとしています。しかし、まずその構文をよりよく理解したいと思います。その概要は次のとおりです。

(function (root, ns, factory) {
    // some code
} (window, 'detectZoom', function() {
    // some more code
}));

完全なコードへの参照については、この投稿で受け入れられた回答を参照してください。

最終結果がどのように達成されるかは理解していますが、内側の (...) ブロックが最初のブロックとどのように関連しているか、またはその中のコンマ区切りのリストがコンパイラに何を伝えているかはよくわかりません。

誰か説明できますか?ありがとう。

4

3 に答える 3

15

すぐに呼び出される3 つのパラメーター ( rootns、 ) を取る無名関数があります。factory

  • root`window の値を取ります。
  • nsの値を取る'detectZoom'
  • factoryコールバック関数の値を取ります (匿名でもあります)

説明:

(function (root, ns, factory) {
   // the body of the anonymous function
} (window, 'detectZoom', function() {
   // the body of the 'factory' callback
}));

分解するには、このコードを 4 つのステップで取得する方法を次に示します。

 1.
 // Anonymous function.
 (function (root, ns, factory) {/* body */});

 2.
 // Anonynmous function, immediately invoked
 (function (root, ns, factory) {/* body */})();  // parentheses mean it's invoked

 3.
 // Callback as a separate argument
 var cbk = function () {};
 (function (root, ns, factory) {/* body */})(window, 'detectZoom', cbk);

 4.
 // Callback as an anonymous function
 (function (root, ns, factory) {/* body */})(window, 'detectZoom', function () {});

コードをより冗長になるように書き直すことができます。

var outer = function (root, ns, factory) {
  // the body
};

var callback = function () {
  // the body
};

outer(window, 'detectZoom', callback);
于 2013-04-03T09:08:41.347 に答える
11

あなたが持っているのは、すぐに呼び出される関数式(IIFE)です。すべての引数を削除すると、次のようになります。

(function () {
    // some code
}());

この関数には、次の 3 つの引数が必要です。

(function (root, ns, factory) {
    // some code
}());

そして、次の 3 つの引数を渡します。

(function (root, ns, factory) {
    // some code
} (window, 'detectZoom', function() {
    // some more code
}));

これらの引数の 1 つ はfactoryたまたま関数です。

于 2013-04-03T09:07:34.397 に答える
1

次の 3 つのパラメーターを受け入れる匿名 (名前のない) 関数を作成します。

function (root, ns, factory) {
    // some code
}

次に、3 つの引数を渡してその関数をすぐに呼び出します。3 番目の引数は別の無名関数です。

(window, 'detectZoom', function() {
    // some more code
})

()2 つのブロックは;のペアでラップする必要があります。理由はここで説明されています:
JavaScript のカプセル化された匿名関数の構文を説明します。

于 2013-04-03T09:07:12.113 に答える