-4

私はJavascriptの経験がありますが、関数キーワードの直前に左括弧がある理由を知りたいです:

 requestAnimFrame = (function(callback) {
    return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||
    function(callback) {
      window.setTimeout(callback, 1000 / 60);
    };
  })();

また、コールバック関数が 2 つある理由を説明できますか。もう 1 つ、コードの最後の行に何も入っていないブラケットがあるのはなぜですか?

4

3 に答える 3

2

これは、自己呼び出しの無名関数です。

(function() {
  // code in here
})();

この宣言を使用すると、その関数を宣言するとすぐに実行されることを確認できます。

于 2013-09-26T14:35:11.370 に答える
2

関数全体が括弧で囲まれているため、関数定義の前に左括弧があります。これにより、すぐに呼び出すことができます。次の構造に注意してください。

(function () {})();

これは (空の) 関数を定義し、2 番目の括弧のセットを適用してその関数をすぐに実行します。

2 つのコールバック関数はありません。この関数の目的は、別の関数を返すことのようです。JavaScript では関数はオブジェクトであることを理解してください。他の変数と同様に渡すことができます。これはそのような変数を探して返します。

これは基本的に次のように読むことができます。

If `window.requestAnimationFrame` exists, return it.
Else, if `window.webkitRequestAnimationFrame` exists, return it.
Else, if ... and so on
Else, if none of them exist, return this custom function (the one that calls `setTimeout`)

返される関数は、requestAnimFrame変数に格納されます。

最後に、最後の行のブラケットは比類のないものではありません。外側の関数の閉じ括弧です。内部関数を返すもの。

于 2013-09-26T14:36:43.750 に答える
1

表示されているパターン (関数の前に括弧を使用し、最後に空のペアを使用) は、即時呼び出し関数式(または IIFE)と呼ばれます。

(function() {
  // ....
})();

関数が呼び出されるのを待つのではなく、すぐに関数を実行します。

于 2013-09-26T14:35:25.690 に答える