简单问题:这段代码的正确结果是什么:
let f = function(){};
let n = f.name; //"" or "f"?
根据兼容表 http://kangax.github.io/compat-table/es6/, n
应该有这个值"f"
。然而,Mozilla 文档 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name说它应该返回一个空字符串。哪一个是正确的?
由于 ECMAScript 6 目前处于草案状态,因此下面的答案可能在将来的某个时候变得过时。
话虽这么说,参考规范草案 http://people.mozilla.org/~jorendorff/es6-draft.html#sec-name:
没有上下文名称的匿名函数对象
通过本规范与它们相关联的没有name自己的
财产但继承name%FunctionPrototype% 的属性。
The ECMAScript 6 维基 http://wiki.ecmascript.org/doku.php?id=harmony:function_name_property读到
如果没有名称可以静态确定,例如
未分配的匿名函数,则使用空字符串。
however,
有些函数是匿名的,并且没有给出名称作为其函数的一部分
静态语义。如果函数直接
分配给一个 LHS,其中名称是静态可确定的,然后 LHS
名称被使用。
请注意,维基百科提出的声明并未在规范草案中引用(也无法直接找到),但它们是合理的假设。
如果我们认为这些假设成立,则示例函数调用的结果将是"f"
,因为匿名函数被分配给 LHS。
读取未分配的匿名函数的 name 属性应返回空字符串。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)