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

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

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

JavaScript

【JavaScript】 async / await の使い方

本サイトの JavaScriptで一定時間待ってから処理を開始する方法 でも少し使ったのですが、JavaScript の async / await の使い方についてこちらのページにまとめておきます。 …

JavaScript

JavaScript の静的インポートと動的インポート

目次1. JavaScript の 2種類のインポート機能(概要)1. モジュール側2. 呼び出し側静的インポート動的インポート2. 静的インポート1. この機能の呼び名2. 特徴3. 仕様4. ブラ …

JavaScript

Node.js のバージョン管理ツール nvm の使い方

目次1. nvm とは?2. nvm の導入1. すでに nvm がインストールされているかチェックする2. nvm をインストールします3. Node.js のインストール4. nvm の便利なコマ …

JavaScript

Yellow Fade の実装サンプル

JavaScript を使ったエフェクト処理の1つである Yellow Fade の実装サンプルを紹介します。