我已经看到了实际的行为,后来发现了匿名函数(最著名的是新箭头函数)的“名称推断”概念,但是我无法找到定义此行为的位置。供参考:
// Arrow functions are inherently anonymous so this shouldn't work
const foo = () => {};
console.log(foo.name); // outputs "foo"
const bar = function() {};
console.log(bar.name); // outputs "bar"
// vs
console.log((() => {}).name) // outputs ""
console.log((function() {}).name) // outputs ""
我发现的最接近的是MDN,将其归因于“ ECMAScript 2015中的新增功能”。我尝试搜索ES2015 spec时没有运气。这似乎是现代ES的一个很大程度上未知但有用的功能,实际上几乎没有文档。
任何人都可以为此提供规范参考吗?
功能对象下,您会找到name
属性。
SetFunctionName
抽象操作分配上下文名称,并且在规范中的26个位置调用该名称:1]在对象文字的SetFunctionName
内部(如果property declarations是匿名函数,{ a: b }
将b
的名称设置为a
)。
2)