请考虑以下代码.

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

请指出我对陈述const foo = () => {};的推理有什么错误.表达式() => {}求值为匿名函数对象,并且该语句将名称foo绑定到该对象.当然,表达式() => {}的值不知道它有namefoo,但不知何故它知道foo之后与它绑定.但这是怎么发生的呢?我假设=不会改变右侧,并且第3行和第4行的行为与我预期的一样.

推荐答案

根据规范,当a variable declaration is evaluatedinitializer是匿名函数定义时,则以特殊方式计算该定义,传递要用作函数名的变量的名称:

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相关问答推荐

CheckBox作为Vue3中的一个组件

阿波罗返回的数据错误,但在网络判断器中是正确的

如何从网站www.example.com获取表与Cheerio谷歌应用程序脚本

如何避免页面第一次加载时由于CSS样式通过JavaScript更改而出现闪烁

本地库中的chartjs-4.4.2和chartjs-plugin-注解

如何在.NET Core中将chtml文件链接到Java脚本文件?

OpenAI转录API错误请求

自定义确认组件未在vue.js的v菜单内打开

如何在Press上重新启动EXPO-AV视频?

未捕获语法错误:Hello World中的令牌无效或意外

通过跳过某些元素的对象进行映射

Pevent触发material 用户界面数据网格中的自动保存

需要RTK-在ReactJS中查询多个组件的Mutations 数据

在传单的图像覆盖中重新着色特定 colored颜色 的所有像素

Firefox的绝对定位没有达到预期效果

如何在HTML中使用rxjs显示动态更新

根据网络速度加载CS

使用Java脚本的响应页面

更改所有验证组件文本和背景 colored颜色

如何将数组时间范围分配给一周中的每一天?