ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScriptの弱参照と強参照を解析してみよう
この記事では、javascript に関する関連知識を提供します。主に、弱参照と強参照、弱参照とは何かなど、弱参照と強参照に関する関連問題を紹介します。機能の概要と機能を見てみましょう。などなど、皆様のお役に立てれば幸いです。
[関連する推奨事項: JavaScript ビデオ チュートリアル 、Web フロントエンド ]
JavaScript における強参照: オブジェクトの参照は、JavaScript では強参照です。つまり、変数または定数を介して参照オブジェクトを保存すると、この変数または定数は強参照であるため、オブジェクトはリサイクルされません。
オブジェクトをキーとして追加する WeakMap または WeakSet では、これらのオブジェクトが無効になることはありません。リサイクルされた。
let people = {name:'张三',age:25} let people1 = people;
{name:'Zhang San ', age:25}変数 people に値を割り当てると、メモリ内でそれらを結ぶ線が作成されます:
次に、 people1 変数を作成し、 people1 に people を割り当てます。これは、people1 もこのオブジェクトを参照しているのと同じです:
ES6 で新しく導入された型 WeakSet と WeakMap を使用して参照値を保存すると何が起こるかを見てみましょう。
let people = {name:'张三',age:25} let people1 = people; let set = new WeakSet(); set.add(people);新しい WeakSet() インスタンスを作成し、add メソッドを使用して人を追加しました。人に対応する参照値は
{name:'Zhang San',age:25} です。
{name:'Zhang San',age:25}参照は
を指しています。 {name :'Zhang San',age:25} (実際のメモリでは、データのスタックのポインタ参照を指し、スタックは対応するヒープ内の対応するアドレスの値を指します)。そして、この弱い参照の「線」は透明であることに注意することが重要です。これは何を意味するのでしょうか?強力な引用との違いは何ですか?
{name:'Zhang San',age:25} この参照は「接続」として認識されますが、弱参照は認識されません。つまり、参照は、セット インスタンスによって参照されていることを認識しません。
let people = {name:'张三',age:25} let people1 = people; let set = new WeakSet(); set.add(people); people = null; people1 = null;すべての強参照を切断するとどうなりますか? すべての強参照が切断されているため、ガベージ コレクションでは参照
{name:'Zhang San',age:25} が存在しないと見なされます。 、破壊されてしまいます。その後、セット インスタンスがまだ参照を使用している場合でも、対応するセット インスタンスによって使用されている参照は存在しなくなります。
4. 強参照は逆参照を忘れることがあり、メモリが解放されず、メモリ リークが発生する可能性があります。弱い参照はガベージ コレクション メカニズムに含まれていないため、この問題は存在しません。
【関連する推奨事項: JavaScript ビデオ チュートリアル 、Web フロントエンド ]
以上がJavaScriptの弱参照と強参照を解析してみようの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。