快速提问:这段代码的正确结果是什么:
let f = function(){};
let n = f.name; //"" or "f"?
根据 兼容性表,
n
的值应该是 "f"
。然而,Mozilla 文档 表示它应该返回一个空字符串。哪一个是正确的?快速提问:这段代码的正确结果是什么:
let f = function(){};
let n = f.name; //"" or "f"?
n
的值应该是 "f"
。然而,Mozilla 文档 表示它应该返回一个空字符串。哪一个是正确的?没有与本规范相关联的上下文名称的匿名函数对象不具有name自有属性,但会继承%FunctionPrototype%的name属性。
如果无法静态确定名称,例如未分配的匿名函数,则使用空字符串。
然而,
请注意,维基百科提出的声明没有在规范草案中引用(也无法直接找到),但它们是合理的假设。一些函数是匿名的,并且在其静态语义中没有给出名称。如果将该函数直接分配给LHS并且可以静态确定名称,则使用LHS名称。
.name
设为可写会更好。当你执行var fn = (function () {return function () {}}());
时,它是否仍然是“直接分配给LHS”的?我还能再次引用匿名函数而不让它们获得“名称”吗?:'( - Paul S.let f = function(){}
const f = function(){}
var f = function(){}
f = function(){} // assignment
let f = () => {}
// etc.