从ECMAScript 6 开始,大多数函数对象都定义了name属性。
现在,如果匿名函数表达式被分配给一个变量或者是对象初始值设定项内的属性定义的一部分,则变量的标识符或属性的名称将是函数对象的name属性的值。
const a = function () {};
console.log(a.name); // a
const object = {
b : function () {}
};
console.log(object.b.name); // b
我在理解有关此行为的文档语义的规范方面没有问题,但我真的看不到,为什么对以下示例中的左侧成员表达式的赋值不会影响函数的name属性,似乎就是这种情况。
const object = {};
object.c = function () {};
console.log(object.c.name); //
作为成员表达式的一部分,显然有一个标识符可以(并且应该?)用作name属性的值。即使属性名称是括号内的表达式,这也应该没有问题,因为在对象初始值设定项中使用计算属性名称也不会阻止定义匿名函数的名称属性。
如果有人能够确认观察到的行为符合规范,并且无论如何,简短地解释适用于此语法的特定语义,那就太好了。