ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScriptの弱参照と強参照を解析してみよう

JavaScriptの弱参照と強参照を解析してみよう

WBOY
WBOY転載
2022-04-18 18:03:433164ブラウズ

この記事では、javascript に関する関連知識を提供します。主に、弱参照と強参照、弱参照とは何かなど、弱参照と強参照に関する関連問題を紹介します。機能の概要と機能を見てみましょう。などなど、皆様のお役に立てれば幸いです。

JavaScriptの弱参照と強参照を解析してみよう

[関連する推奨事項: JavaScript ビデオ チュートリアル Web フロントエンド ]

何弱参照と強参照

JavaScript における強参照: オブジェクトの参照は、JavaScript では強参照です。つまり、変数または定数を介して参照オブジェクトを保存すると、この変数または定数は強参照であるため、オブジェクトはリサイクルされません。

JavaScript での弱参照: WeakMaps と WeakSet は、JavaScript で弱参照を使用できる唯一の方法です。

オブジェクトをキーとして追加する WeakMap または WeakSet では、これらのオブジェクトが無効になることはありません。リサイクルされた。

弱参照と強参照の例

強参照は犬を抱いている子供 A で、犬の鎖でつながれています。

弱参照とは、A が飼っている犬を指差して、隣に人 B がいて、「おい、あそこに犬がいるよ。B は犬を指さすが、両者の間には何も結びついていない」ということを意味します。 。

A が犬のリードを放すと、B がまだ指を指しているかどうかに関係なく、犬は逃げます (ガベージコレクションされた)。

ただし、B が犬を指さなくなっても、犬は A に抱きかかえられたままなので、犬が逃げるかどうかには影響しません。


JavaScriptの弱参照と強参照を解析してみよう

JavaScript での弱参照と強参照のデモ
let people = {name:'张三',age:25}
let people1 = people;

上記のコードでは、

{name:'Zhang San ', age:25}変数 people に値を割り当てると、メモリ内でそれらを結ぶ線が作成されます:

JavaScriptの弱参照と強参照を解析してみよう 次に、 people1 変数を作成し、 people1 に people を割り当てます。これは、people1 もこのオブジェクトを参照しているのと同じです:

JavaScriptの弱参照と強参照を解析してみよう 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} です。

JavaScriptの弱参照と強参照を解析してみよう

セット インスタンスの値を確認できます。

{name:'Zhang San',age:25}参照は を指しています。 {name :'Zhang San',age:25} (実際のメモリでは、データのスタックのポインタ参照を指し、スタックは対応するヒープ内の対応するアドレスの値を指します)。そして、この弱い参照の「線」は透明であることに注意することが重要です。これは何を意味するのでしょうか?強力な引用との違いは何ですか?

一文の要約: 強参照は

{name:'Zhang San',age:25} この参照は「接続」として認識されますが、弱参照は認識されません。つまり、参照は、セット インスタンスによって参照されていることを認識しません。

これは、ガベージ コレクションは、参照がセット インスタンスによって参照されていることを認識していないことを意味します。その後、参照のすべての強参照接続が切断されると (変数が null またはその他の状況に割り当てられると)、設定されたインスタンスがまだ参照を参照している場合でも、参照はガベージとして破棄されます。

let people = {name:'张三',age:25}
let people1 = people;

let set = new WeakSet();
set.add(people);
people = null;
people1 = null;
すべての強参照を切断するとどうなりますか?

JavaScriptの弱参照と強参照を解析してみよう

すべての強参照が切断されているため、ガベージ コレクションでは参照

{name:'Zhang San',age:25} が存在しないと見なされます。 、破壊されてしまいます。その後、セット インスタンスがまだ参照を使用している場合でも、対応するセット インスタンスによって使用されている参照は存在しなくなります。

弱参照の特性の概要

1. WeakSet 内のオブジェクトへの参照は弱参照です。つまり、たとえ弱セットが「参照」であっても、 " オブジェクトです。それはゴミです。リサイクルでは、この種の参照は「参照」としてカウントされません。このオブジェクトへの強い参照が他の場所にない限り、オブジェクトには到達できず、いつでもリサイクルできます。参照型のみです。保存することはできますが、列挙したりクリアしたりすることはできません。

2. WeakMap は Map に似ていますが、列挙可能ではなく、クリアすることもできず、キーによって参照されるオブジェクトは弱参照です。

3. WeakSet は、オブジェクトのグループを一時的に保存し、オブジェクトにバインドされた情報を保存するのに適しています。これらのオブジェクトが外部で消える限り、WeakSet 内のそれらの参照は自動的に消えます。上記の特性により、WeakSet のメンバはいつ消滅してしまうのか参照には適していません。

4. 強参照は逆参照を忘れることがあり、メモリが解放されず、メモリ リークが発生する可能性があります。弱い参照はガベージ コレクション メカニズムに含まれていないため、この問題は存在しません。

【関連する推奨事項: JavaScript ビデオ チュートリアル Web フロントエンド ]

以上がJavaScriptの弱参照と強参照を解析してみようの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。