jsの閉鎖とメモリリーク - コレクションメカニズム

JS閉鎖、長所と短所。
グローバル変数とローカル変数、柔軟な使用の可変範囲のため。
JSの機能:内部関数のグローバル変数が直接読み取ることができますが、関数の外の関数内のローカル変数を読み取ることができません。
閉鎖を完了するためには、関数内のローカル変数が外から読み取ります。

F1関数(){
VAR = N-999、
関数F2(){
にconsole.log(N-);
}
}
関数内のローカル変数は、関数が再び関数内で定義されている柔軟なアプローチを取得したいです。
内部関数の内容を取得するので、外部関数は内部関数の内容を読み取ることはできませんが、内部関数は、グローバル変数にアクセスすることができます関数を定義することである関数を定義した内部関数の関数となります。しかし、親関数に対する内部変数関数は表示されません。-js言語固有のスコープ鎖構造。(サブオブジェクトは、子オブジェクトのためのすべてのオブジェクトの親オブジェクトが表示されますが、親オブジェクトに子オブジェクトが表示されていないように、親オブジェクトのすべての変数を見つけるために、レベルアップになります。)

コンセプト閉鎖:f2は関数であります閉鎖。アクションの閉鎖は内部変数他の関数の機能を読み取ることができます。
JSのみ関数関数内のローカル変数を読み取ることができます。クロージャーは、サブルーチン内部関数です。クロージャは、内部および外部機能のブリッジ機能に接続されています。
アクション閉鎖:1は、内部変数の関数を読み込みます。2.変数の値は、コールが自動的にクリアされた後、f1ないもはや、それらの記憶に残ってみましょうありません。ガベージコレクションのメカニズムの回復の終了後に呼び出すことはありません、それはメモリ内になるよう常に存在F2 F1はF1に依存し、F1、F2は、親関数であり、f2はf2にリードは常にメモリ内に存在している、グローバル変数に代入され、ガベージコレクションの回復。

NADD =関数(){N + = 1} まずNADDするvar以前に使用されていないキーワード、NADDは、グローバル変数ではなく、ローカル変数です。第二に、値がNADD、匿名関数自体とクロージャは、従って、セッターNADDに相当する匿名関数であり、関数の外側に関数内のローカル変数に動作することができます。

それ以外の場合は、メモリリークの問題を引き起こす可能性がIEのパフォーマンスの問題のページが発生します、メモリの消費量が大きい場合、1に起因して閉鎖が変数の関数がメモリに保存されているようになりますので、閉鎖を乱用することはできません。使用してクロージャは注意してください。機能を終了すると、すべてのローカル変数を削除するために使用されることはありません前に解決策は、あります。親外部2.クロージャ機能、親機能は、内部変数の値を変更します。オブジェクトとして親関数は、公共の方法として閉鎖は、彼の私的財産として内部変数は、その後、我々は慎重でなければならないのであれば、内部変数の親関数の値を変更しないでください。


JSガベージコレクション:
メモリ内のjs、自動ガベージコレクションのメカニズムが使用JSの実行環境は、コードの実行を管理する責任を負います。
ライフサイクル:変数のライフサイクルの終わりには、それはメモリを指して解放する必要があります。JS二つの変数、生成されたローカル変数で定義されたグローバル変数と関数。ローカル変数のライフサイクル機能の実行が終わった後に、この時間は、それはメモリへの参照を解放します。しかし、グローバル変数は、ブラウザのページをシャットダウンしていきます。

ガベージコレクションのJS形式:JS実行環境のガベージコレクタは、どのように私は、メモリの一部は、主に二つの方法で回収することができる検出をクリア、参照カウントをマークすることができます。
クリアタグ:関数は環境を残すマーキング、機能が実行されたときに、実行される環境へのタグ。不確実な方法である環境だけでなく、変数マーカーを出た後、それが逆転やメンテナンスリストの特定のビットかもしれません。
すべての変数メモリのガベージコレクタは、環境変数で参照する環境変数と変数を削除マークし、マークされています。その後、再び、環境変数は、これらの変数にアクセスすることができなかったので、マークされた変数は、回復する変数が必要であると組み合わせます。

参照カウント:メモリリークを引き起こす可能性があり、このように、つまり、以前のバージョンでは、このメソッドを使用します。あなたは数マイナス1を引用する価値がある別の時間に変数と被引用数を加え、この変数のポイント変数に割り当てられたワンタイムタイプの基準値を宣言するときには、回数を追跡するためのメカニズムを引用する価値があります。値が0の場合の参照番号である場合、回収されるであろう。

漏れの原因は、循環参照の問題を解決していません。(中間値を使用せずに目標ループ割り当て)
関数S(){VARのA = {}; VARのB = {}; a.prop = B; A = b.prop}

この場合、各コールに結果機能、a、bはメモリリークが発生、このメモリは、解放されることはありません2の参照カウントです(メモリを解放し、または占有されている使用することはできません。)

おすすめ

転載: www.cnblogs.com/lxj666/p/11358434.html