web*_*wer 1 javascript specifications
我亲眼目睹了这种行为,后来发现了匿名函数(最显着的是新的箭头函数)的“名称推断”概念,但我一直无法找到这种行为的定义位置。以供参考:
// 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 ""
Run Code Online (Sandbox Code Playgroud)
我发现的最接近的东西是在MDN 上,它将它归因于“ECMAScript 2015 中的新内容”。我试图搜索ES2015 规范,但没有运气。这似乎是现代 ES 的一个很大程度上未知但有用的功能,实际上几乎没有相关文档。
任何人都可以为此提供对规范规范的参考吗?
在函数对象下,您将找到该name属性。
使用SetFunctionName抽象操作为该属性分配上下文名称,并在规范中的不同位置调用该名称:
1) 在对象字面量内的属性声明处(如果是匿名函数,则{ a: b }设置bto的名称)。ab
2) 在赋值时,(a = b将b名称设置为aifa直接是一个标识符并且b也是一个匿名函数)。
3) 内部对象解构默认值({ a = b } =将bs 名称设置为aifb是匿名函数)。
4) 内部函数参数解构与 3) 类似。
5) 在变量声明中与 2) ( let a = b; const a = b; var a = b;)类似。
6) at函数声明(包括生成器函数( function a() { })。
7) 在对象方法中,getter(以“get”为前缀)和 setter(以“set”为前缀)({ a() { }, get a() {}, set a() {} })。
8) atclass声明和表达式( class a {})。
9)绑定函数时,绑定函数接管以“bound”为前缀的要绑定的函数名。
请注意,如果出于安全考虑存在计算键或对象属性分配,则不会分配名称。
| 归档时间: |
|
| 查看次数: |
184 次 |
| 最近记录: |