◆ ES6 のメソッド定義の構文だと関数(メソッド)を再帰呼び出しするときに 関数名だとできない

いきなりですが このコード
var a = 1, b = 2, c = 3
var obj = {
    a: function(){console.log(a)},
    b: function b(){console.log(b)},
    c(){console.log(c)}
}
obj.a()
obj.b()
obj.c()
1
function b(){console.log(b)}
3

こうなります

b は名前をつけているので 関数内から b を参照すると自分自身の関数です
a は名前無しの関数なので a はグローバルのものになります

では es6 の新記法の c ですが a と同じでグローバルを参照しています

nameプロパティを確認すると
console.log("name a: ", obj.a.name)
console.log("name b: ", obj.b.name)
console.log("name c: ", obj.c.name)
name a:
name b:  b
name c:  c

となっていて c には c という名前がついています
ですが 関数内で その名前で自身を参照できないので 関数宣言の構文と同じような動きのようです
function fn(){console.log(fn)}
console.log(fn.name)

var f = fn
fn = 1
f()
fn
1

関数宣言では name にプロパティ入りますが 関数内で宣言時の名前が自分を参照してるわけではないです