【JSリファレンス】WeakRefコンストラクター

更新日:2024/06/14

初出:ECMAScript2021


WeakRefコンストラクターは、内部値としてオブジェクトまたはシンボルへの弱い参照を保持します。
Symbol.for()で登録したシンボルは対象外です。

JavaScriptの仕組み上、変数やプロパティで参照されなくなった実データを再度参照することはできません。
そのようなデータは不要と判断され、ガーベッジコレクションが独自のタイミングでメモリ上から削除します。

このとき、弱い参照はガーベッジコレクションの判定対象となりません。
つまりWeakRefでデータを参照していても、データが削除される可能性があります。

なお、ガーベッジコレクションの実行タイミングは環境やによって異なります。
データへの参照がゼロになった時点で実行されるかもしれませんし、実行されずにプログラムが終了するかもしれません。
同じコンピューター上でも、実行する度にタイミングが異なる可能性もあります。

そのためWeakRefに関わるコードでの不具合は、再現性が難しいものになる可能性があります。

 

■使用例

下記のコードをブラウザで実行したとき、意図した動作(タイマー終了)を行う可能性があります。

let obj = {
  data:new Uint8Array(555555555),
  count:0,
  f:function(){
    console.log( ++this.count + "回目" );
  }
}

const wref = new WeakRef(obj);

const interval = setInterval( ()=>{
  const wrefValue = wref.deref();
  if( wrefValue ) {
    wrefValue.f();
  }else {
    console.log( "データが削除されました");
    clearInterval(interval);
  }
    
},1000);

obj = null;

 

■コンストラクター

 

■プロパティ

 

■メソッド

 

■prototypeプロパティ

 

■prototypeメソッド

更新日:2024/06/14

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://jsref.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。