正解は Hello, undefined です。これはJavaScriptにおける this の挙動と、アロー関数の特性を理解していないと間違えやすい問題です。アロー関数の this は「定義時」に決まるアロー関数は自身の this を持ちません。代わりに、定義された場所(レキシカルスコープ)の this をそのまま引き継ぎます。このコードでは、greet はモジュールのトップレベル(またはグローバルスコープ)で定義されています。そのため this は obj ではなく、グローバルオブジェクト(strictモードでは undefined)を指します。// アロー関数 → this は obj ではなく外側のスコープ const obj = { name: 'Alice', greet: () => console.log(this.name) // this !== obj }; // 通常の関数 → this は呼び出し元の obj になる const obj2 = { name: 'Alice', greet() { console.log(this.name); } // this === obj2 };通常の関数(function)との違い通常の関数における this は「どう呼び出されたか」で動的に決まります。obj.greet() のようにメソッドとして呼べば this === obj です。アロー関数ではこの動的束縛が起きないため、オブジェクトのメソッド定義には通常の関数やメソッド省略記法を使うのが適切です。