JavaScript

JavaScript で「弱い参照」を作成する

※当サイトにはプロモーションが含まれています。

投稿日:2023年1月12日 更新日:

1. 「(普通の)参照」と「弱い参照」

例えば以下のように、{ name; 'foo' } というオブジェクトが obj という変数にセットされた場合、このオブジェクトは obj という変数によって「参照」されていると言えます。

let obj = { name: 'foo' }

このように、あるオブジェクトへの「(普通の)参照」が存在している間、そのオブジェクトがメモリ上から勝手に削除されることはありません。まだそのオブジェクトは使われる可能性がありますので。当たり前の話ではあります。

しかし、この後 この obj が別のオブジェクトを参照したとします。

obj = { name: 'bar' }

すると、最初のオブジェクト { name: 'foo' } はどこからも参照されなくなったため(使いたくてもアクセスできません)、必要ないと判断され、どこかしらのタイミングでメモリ上から削除されてしまいます。(この機能を、ガベージコレクションと言います)

これに対して「弱い参照」は、参照ではあるけれども、ガベージコレクションによる削除対象となる参照です。つまり、そのオブジェクトはいずれメモリ上から削除されます。

2. JavaScript で「弱い参照」を扱う

JavaScript で「弱い参照」を作成するには、WeakRef というオブジェクトを使います。

2-1.「弱い参照」を作成する

あるオブジェクトが変数 obj にセットされているとします(普通の「参照」です)。

let obj = { name: "foo" }

この obj を引数にして、WeakRef オブジェクトを作成します。

const weakRef = new WeakRef(obj)

元のオブジェクトに対する「弱い参照」を保持したオブジェクトができました。

この後、obj が別のオブジェクトを参照したとしましょう。

obj = { name: 'bar'}

すると、元のオブジェクト { name: 'foo'} は、「弱い参照」はあるものの 普通の「参照」はなくなりますので、ガベージコレクションによる削除対象になります。

2-2. 参照先のオブジェクトを取得する

参照先のオブジェクトを取得するには、WeakRef オブジェクトの deref メソッドを使います。参照先が既に削除されている場合は undefined を返しますので、参照先が削除されたかどうかの判定にも使用できます。

weakRef.deref()

3. おわりに

実際に使う機会は、あまりないのではないでしょうか。

4. 参考

スポンサードリンク

📂-JavaScript

執筆者:labo


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

JavaScript

npm パッケージのセキュリティをチェックして必要なら対応する

目次1. npm パッケージのセキュリティnpm audit コマンドnpm outdated コマンド2. 実際にこれらのコマンドを利用してみる1. セキュリティのチェックと対応2. 古いパッケージ …

JavaScript

Webページ上でボタンを押したときに、必要な JavaScriptコードを読み込んで実行するサンプル

Webページ上でボタンを押したときに、必要な JavaScriptコードを読み込んで実行するサンプルコードを紹介します。

JavaScript

JavaScript による HTTP(S)リクエスト送信のいろいろな書き方

目次1. はじめに2. JSON を取得するコード(1) axios (XMLHttpRequest) (基本形)(2) axios (XMLHttpRequest) (async/await を使用 …

JavaScript

JSON.stringify() の引数に関する忘備録

JavaScript でよく使う JSON.stringify()メソッドですが、第二引数と第三引数の意味を忘れがちなので本ページに記録しておきます。

JavaScript

JavaScript のオプショナルチェーン

JavaScript のオプショナルチェーンを紹介します。