ホームページ  >  記事  >  ウェブフロントエンド  >  Javascript_15_scope の割り当てと変数のアクセス ルールを理解して、closure_javascript スキルを送信します。

Javascript_15_scope の割り当てと変数のアクセス ルールを理解して、closure_javascript スキルを送信します。

WBOY
WBOYオリジナル
2016-05-16 18:18:24916ブラウズ
スコープの割り当てと変数のアクセスルール
ECMAScript では関数もオブジェクトです。関数オブジェクトは、変数のインスタンス化中、または関数式が評価されるとき、または Function コンストラクターが呼び出されるときに、関数宣言から作成されます。 (「関数オブジェクト」については、「JavaScript_08_関数オブジェクトを理解する」を参照してください)。すべての関数オブジェクトには内部 [[scope]] プロパティがあり、これもオブジェクトのリスト (チェーン) で構成されます。内部 [[scope]] 属性は、オブジェクトが作成された実行環境のスコープ チェーンを参照し、現在の実行環境のアクティブなオブジェクトがオブジェクト リストの先頭に追加されます。関数内の変数にアクセスするとき、それは実際にはスコープ チェーン上で変数を見つけるプロセスです。

理論的すぎます (死ぬほど要約しています!)。コードの一部を見てみましょう:
コードをコピー コードは次のとおりです。

>
外側の匿名関数はインライン関数を返し、インライン関数は外側の匿名関数のローカル変数 ID を使用します。論理的に言えば、外側の匿名関数のローカル変数は返されるとスコープ外になるため、increment() 呼び出しは使用できません。これはクロージャです。つまり、関数呼び出しは埋め込み関数を返し、その埋め込み関数は、閉じられる (Close) 必要がある外部関数のローカル変数、パラメータ、その他のリソースを参照します。どうしたの?答えを見つけてみましょう:


スコープ チェーンの理解によれば、返されたインライン関数は構築時にすでにスコープ チェーンを保持していると説明できますが、外部の戻りによりこれらのオブジェクトは出力されます。ただし、JavaScript はオブジェクト メモリを解放するために自動ガベージ コレクションを使用します。ルールに従って定期的にチェックされ、オブジェクトは参照がない場合にのみ解放されます。したがって、上記のコードは正しく実行されます。

参考:
http://www.cnblogs.com/RicCC/archive/2008/02/15/JavaScript-Object-Model-Execution-Model.html
http://www .cn-cuckoo.com/2007/08/01/ Understand-javascript-closures-72.html
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。