You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

匿名函数如何知晓自身名称?JS代码相关推理疑问解析

问题解答

你的推理错误点

  • 错误认为() => {}生成的是完全匿名的函数对象:ES6及之后的JavaScript中,这类函数并非完全匿名,引擎会根据定义上下文自动推断并设置name属性。
  • 错误认为函数的name属性是赋值后才被赋予的:实际上,函数的name属性在创建阶段就已经被引擎确定,并非赋值运算符修改了右侧的函数对象。

原理说明

当你执行const foo = () => {}时,这属于赋值式函数定义场景,ES6规范明确规定:如果函数表达式是赋值操作的右侧值,且左侧是一个标识符(这里就是foo),那么引擎会将这个标识符作为函数的name属性值。这个赋值是在函数对象创建时完成的,和后续的赋值操作无关——赋值运算符只是把已经带有name属性的函数对象引用绑定到变量foo上,并没有修改函数本身。

至于代码中第3、4行的表现:bar只是引用了同一个函数对象,函数的name属性从创建时就固定为foo,所以无论用哪个变量引用它,输出的name值都不会变,这和你“赋值运算符不修改右侧值”的认知是一致的。

补充:真正的匿名函数是没有上下文可推断名称的场景,比如setTimeout(() => { console.log('hi') }, 1000),这个箭头函数的name属性会是空字符串,不会有自动推断的名称。

内容的提问来源于stack exchange,提问作者lamc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 10:25:33