ガベージコレクションについて


JavaScriptのガベージコレクション（以下GC）について質問です。

以下の二例で前者だけ変数objがGCされる理由がわかりません。どちらも監視対象への参照は切っており、global.gc()の実行されるタイミングも同じ同期処理内なので変化はないように思えます。なにが原因で異なる結果が生じているのでしょうか。

[code]

    // GCされる例
    hoge();
    
    function hoge(){
        let obj = {}
        const fr = new FinalizationRegistry(function(value){
            console.log(value);
        });
        fr.register(obj, 'object');
        obj = null;
        global.gc();
    }
    
[/code]

[code]

    // GCされない例
    hoge();
    global.gc();
    
    function hoge(){
        let obj = {}
        const fr = new FinalizationRegistry(function(value){
            console.log(value);
        });
        fr.register(obj, 'object');
        obj = null;
    }
    
[/code]




おそらく`object`が出力されるかどうかで、GCされるされないを判断しているのだと思いますが、`fr`が`hoge()`のローカル変数なので、コールバック関数の設定が`hoge()`の外に伝播していないだけでしょう．  
`fr`をグローバルスコープにしたら、`object`と出力されました．

[code]

    const fr = new FinalizationRegistry(function(value){
        console.log(value);
    });
    
    function hoge(){
        let obj = {}
        fr.register(obj, 'object');
        obj = null;
    }
    
    hoge();
    global.gc();
    
[/code]

