3 回答
TA贡献1840条经验 获得超5个赞
在Function Objects 下,您将找到该name
属性。
使用SetFunctionName
抽象操作将上下文名称分配给该属性,并在规范中的不同位置调用:
1) 在对象字面量内的属性声明处({ a: b }
将名称设置为b
to a
,如果b
是匿名函数)。
2)在赋值时,(a = b
将b
的名称设置为a
ifa
直接是一个标识符并且b
也是一个匿名函数)。
3) 内部对象解构默认值({ a = b } =
将b
s 名称设置为a
ifb
是匿名函数)。
4)内部函数参数解构类似于3)。
5) 在变量声明处与 2) ( let a = b; const a = b; var a = b;
)类似。
6) 在函数声明处(包括生成器函数( function a() { }
)。
7) 在对象方法中,getter(以“get”为前缀)和 setter(以“set”为前缀)({ a() { }, get a() {}, set a() {} }
)。
8) 在class
声明和表达式处( class a {}
)。
9)绑定函数时,被绑定的函数会接管要绑定的函数名,前缀为“bound”。
请注意,如果出于安全考虑存在计算键或对象属性分配,则不会分配名称。
TA贡献1829条经验 获得超13个赞
函数的.name
属性是在SetFunctionName过程中创建的,该过程在整个规范中的各个地方都被调用,通常当您分配变量或定义属性时,右侧是匿名函数表达式。
另请参阅ECMAScript 6 的 function.name 属性、赋值表达式中 name 属性的定义以及为什么 `obj.foo = function() { };` 不将名称 `foo` 分配给函数?进行更多讨论。
TA贡献1893条经验 获得超10个赞
@asdfgerte 获胜(最初)(我认为我不能授予评论作为答案)。在规范中找到但未命名为“名称推断” http://www.ecma-international.org/ecma-262/6.0/index.html#sec-assignment-operators-runtime-semantics-evaluation
添加回答
举报