ホームページ  >  記事  >  ウェブフロントエンド  >  Javascript デザインパターン (2) Closure_JavaScript スキル

Javascript デザインパターン (2) Closure_JavaScript スキル

WBOY
WBOYオリジナル
2016-05-16 18:26:12888ブラウズ

テキスト

クロージャの概念:

クロージャは、多くの変数とこれらの変数にバインドされた環境を持つ式 (通常は関数) であり、したがって、これらの変数は式の一部でもあります。

最も一般的なクロージャ


コードをコピー コードは次のとおりです:

関数 a() {
var i=0;
return function(){
alert(i );
}
var b= a( );
for(var i=0;ib()
}


上記のコードを説明する前に、まず a を受け入れます。 関数の作成と実行のプロセス

最初のステップ: 関数を定義し、環境を設定し、スコープ チェーンを作成します。 a はグローバル変数であり、a のスコープ チェーンには 1 つの変数しかありません。 window

ステップ 2: a を実行し、最初にスコープ (a.scope=a) を作成し、次にアクティブ オブジェクト (callObject) を作成し、callObject を a のスコープ チェーンの先頭に置きます。 a のスコープ チェーンには 2 つのオブジェクト (a と window) が含まれます

ステップ 3: アクティブ オブジェクトに argument 属性を追加して、a を呼び出すときにパラメーター値を保存します

ステップ 4: 仮パラメーターと内部変数 アクティブなオブジェクトに移動

javascriptGC 原則: オブジェクトが参照されなくなった場合、そのオブジェクトは GC によってリサイクルされます。 2 つのオブジェクトが干渉することなく相互に参照している場合、両方のオブジェクトもリサイクルされます。

概要:

1. 最初に a を定義するときに、a のスコープ チェーンが作成されます。

2. スコープの作成時に (var b=a()) が実行されます。 a.scope=a、callObject オブジェクトを作成し、それを a

のスコープに追加します。 3. argument 属性を a オブジェクトに追加し、i 関数と return 関数をアクティブ オブジェクト

4. aが実行されると、bはaのruturn関数の値を指し、bはaのローカル変数iを参照するため、アクティブなオブジェクトaはリサイクルされません。 b は i にアクセスします。これは初めてアクセスされるオブジェクトであり、b でのみアクセスできます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。