ホームページ  >  記事  >  ウェブフロントエンド  >  JSにおけるクロージャの意味

JSにおけるクロージャの意味

一个新手
一个新手オリジナル
2017-09-11 10:34:461250ブラウズ


クロージャ

クロージャは、別の関数のスコープ内の変数にアクセスできる関数です。

クロージャの作成方法

最も一般的なのは、関数の中に別の関数を作成することです。 TrialFunction() 関数を例に挙げます。

function TrialFunction(property) {

      return function(a, b) {
           var a1 = a[property];           var b1 = b[property];           if (a1 < b1) {                return -1;
           } else if (a1 > b1) {                return 1;
           } else {                return 0;
           }
      };
}

上記のコードでは、内部関数は外部関数の変数プロパティにアクセスします。内部関数が返されて別の場所で呼び出された場合でも、他の関数は引き続きプロパティ変数にアクセスできます。

この状況は、この内部関数のスコープ チェーンに TrialFunction のスコープが含まれているためです。

関数が呼び出されると、実行環境 (実行コンテキスト) と対応するスコープ チェーンが作成されます。その後、関数のアクティビティ オブジェクトが、引数およびその他の名前付きパラメーターの値を使用して初期化されます。ただし、スコープ チェーンでは、外部関数のアクティブ オブジェクトが常に 2 番目にあり、外部関数のアクティブ オブジェクトが 3 番目にあり、最後にスコープ チェーンとしてグローバル実行環境まで続きます。

関数の実行中に、変数の値を読み書きするには、スコープ チェーン内で変数を見つける必要があります。

このスコープ チェーンのメカニズムは副作用を引き起こします。つまり、クロージャは、それを含む関数内の変数の最後の値しか取得できません。
例:

function example() {
   var result = new Array();  
   for (var i = 0; i < 10; i++) 
   {
      result[i] = function() 
      {
         return i;
      }
   }   return result;
}

この関数は配列を返します。一般に、各関数は独自のインデックス、つまり [0, 1, 2, ...9] を返す必要があると考えています。戻ります 10です。

以上がJSにおけるクロージャの意味の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。