? JavaScript における強参照: JavaScript では、オブジェクトの参照は強参照です。つまり、将一个引用对象通过变量或常量保存
場合、その変数または定数は強参照になります。オブジェクトはリサイクルされません。
JavaScript の弱い参照: WeakMaps と WeakSet は、JavaScript で弱い参照を使用できる唯一の方法です。WeakMap または WeakSet への将一个对象作为键添加
これらのオブジェクトのリサイクルは妨げられません。
、子供 A が犬を抱き、犬の鎖でつながれている場合です。
弱い参照とは、人 B がいて、A が抱いている犬を指して、「おい、そこに犬がいるよ。B はその犬を指さしているが、両者の間には何も結びついていない」ということです。
A が犬のリードを放すと、B がまだ指を指しているかどうかに関係なく、犬は逃げます (ゴミが収集されました)。
しかし、B が犬を指さなくなっても、犬はまだ A に抱きかかえられているので、犬が逃げるかどうかには影響しません。
let people = {name:'Zhang San',age:25} let people1 = people;
上記のコードで、変数 people に{name:'张三',age:25}
を割り当てると、メモリ内にそれらを接続する線が作成されます。
次に、people1 変数を作成し、people1 に people1 を割り当てます。これは、people1 もこのオブジェクトを参照するのと同じです。
ES6 で新しく導入されたタイプ WeakSet と WeakMap を使用して参照値を保存すると何が起こるかを見てみましょう。
let people = {名前:'張三'、年齢:25} people1 = 人々とします。 set = new WeakSet(); set.add(people);
新しい WeakSet() インスタンスを作成し、add メソッドを通じて人々を追加しました。 people に対応する参照値は{name:'张三',age:25}
です。
セットインスタンス内の値{name:'张三',age:25}
は{name:'张三',age:25}
を参照していることがわかります (実際のメモリでは、データのスタックを指します)ポインタ参照。スタックは、対応するヒープ内の対応するアドレスの値を指します。そして、この弱い参照の「線」は透過的であることに注意することが重要です。これは何を意味するのでしょうか。強力な引用との違いは何ですか?
一文の要約: 強参照は参照{name:'张三',age:25}
によって「接続」として認識されますが、弱参照は認識されません。つまり、参照は、セット インスタンスによって参照されていることを認識しません。
これは、ガベージ コレクションは、参照がセット インスタンスによって参照されていることを認識しないことを意味します。その後、参照のすべての強参照接続が切断されると (変数が null またはその他の状況に割り当てられると)、設定インスタンスがまだ参照を参照している場合でも、参照はガベージとして破棄されます。
let people = {名前:'張三'、年齢:25} people1 = 人々とします。 set = new WeakSet(); set.add(人); 人々 = null; people1 = null;
すべての強参照を切断するとどうなるでしょうか?
すべての強参照が切断されているため、ガベージ コレクションは参照{name:'张三',age:25}
が不要になったと判断し、参照を破棄します。その後、セット インスタンスがまだ参照を使用している場合でも、対応するセット インスタンスによって使用されている参照は存在しなくなります。
1. WeakSet 内のオブジェクトへの参照は弱参照です。つまり、WeakSet がオブジェクトを「参照」しても、ガベージ コレクションではこの参照は「参照」としてカウントされません。他の場所に強い参照がない限り、このオブジェクトはいつでも再利用できます。参照型を保存することしかできず、列挙したりクリアしたりすることはできません。
2. WeakMap は Map に似ていますが、列挙可能ではなく、クリアすることもできず、キーによって参照されるオブジェクトは弱参照です。
3. WeakSet は、オブジェクトのグループを一時的に保存し、オブジェクトにバインドされた情報を保存するのに適しています。これらのオブジェクトが外部で消える限り、WeakSet 内のそれらの参照は自動的に消えます。 上記の特性により、WeakSet のメンバはいつ消滅してしまうため、参照には適していません。
4. 強参照は逆参照を忘れることがあり、メモリを解放できなくなり、メモリ リークが発生する可能性があります。弱い参照はガベージ コレクション メカニズムに含まれていないため、この問題は存在しません。