メソッドの定義の構文は関数構文と同じ扱い
- カテゴリ:
- JavaScript
- コメント数:
- Comments: 0
◆ ES6 のメソッド定義の構文だと関数(メソッド)を再帰呼び出しするときに 関数名だとできない
いきなりですが このコード
こうなります
b は名前をつけているので 関数内から b を参照すると自分自身の関数です
a は名前無しの関数なので a はグローバルのものになります
では es6 の新記法の c ですが a と同じでグローバルを参照しています
nameプロパティを確認すると
となっていて c には c という名前がついています
ですが 関数内で その名前で自身を参照できないので 関数宣言の構文と同じような動きのようです
関数宣言では name にプロパティ入りますが 関数内で宣言時の名前が自分を参照してるわけではないです
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()
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
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)
console.log("name b: ", obj.b.name)
console.log("name c: ", obj.c.name)
name a:
name b: b
name c: c
name b: b
name c: c
となっていて c には c という名前がついています
ですが 関数内で その名前で自身を参照できないので 関数宣言の構文と同じような動きのようです
function fn(){console.log(fn)}
console.log(fn.name)
var f = fn
fn = 1
f()
console.log(fn.name)
var f = fn
fn = 1
f()
fn
1
1
関数宣言では name にプロパティ入りますが 関数内で宣言時の名前が自分を参照してるわけではないです