javascript - 匿名函数如何知道它的名字?

标签 javascript first-class-functions

考虑以下代码。

const foo = () => {};
console.log(foo.name); // prints foo
const bar = foo;
console.log(bar.name); // prints foo again

请指出我对 const foo = () => {}; 语句的推理有什么问题。表达式 () => {} 计算结果为匿名函数对象,并且该语句将名称 foo 绑定(bind)到该对象。当然表达式 () => {} 的值不知道它有 name foo,但不知何故它知道 foo 之后 与其绑定(bind)。但这是怎么发生的呢?我假设 = 不会改变右侧,并且第 3 行和第 4 行的行为符合我的预期。

最佳答案

根据规范,当 a variable declaration is evaluated并且初始化是一个匿名函数定义,然后该定义以特殊方式进行计算,传递要用作函数名称的变量名称:

LexicalBinding : BindingIdentifier Initializer
1. Let bindingId be StringValue of BindingIdentifier.
2. Let lhs be ! ResolveBinding(bindingId).
3. If IsAnonymousFunctionDefinition(Initializer) is true, then
   a. Let value be ? NamedEvaluation of Initializer with argument bindingId.
...

评估赋值表达式时会发生类似的情况。

关于javascript - 匿名函数如何知道它的名字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73804138/

相关文章:

javascript - 从另一个函数返回的函数

typescript - 在 Typescript 中将函数用作一等值时,有没有办法传递通用绑定(bind)?

javascript - Node - 如何将 MongoDB 时间戳转换为日期

javascript - 如何访问云功能内的Firebase数据库?

javascript - 当其中一个菜单使用 Ajax 调用时,页面上的其余菜单无法正确加载

javascript - 不理解 Node.js 示例中一级函数和 csv 模块事件的用法

javascript - 为什么正则表达式对 5-n www 有反应?

javascript - 从 MySQL 解析时转换的日期时间值

python - 是什么让 Python 不是函数式编程语言?

python - 创建类后在方法上设置属性会引发 "' instancemethod' object has no attribute“但属性显然存在