You need to enable JavaScript to run this app. JavaScript中给函数name属性赋值后打印仍为原函数名是什么原因
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中给函数name属性赋值后打印仍为原函数名是什么原因

问题原因

函数的name是ES6之后加入ECMAScript规范的内置原生属性,对于函数声明创建的函数,该属性默认是不可写入的,直接赋值操作会被静默忽略,如果你开启严格模式运行代码,还会直接抛出类型错误提示你无法修改只读属性。

你可以通过Object.getOwnPropertyDescriptor方法查看该属性的配置项:

function a(){}
console.log(Object.getOwnPropertyDescriptor(a, 'name'))

返回的属性描述符如下:

{
  value: "a",
  writable: false,
  enumerable: false,
  configurable: true
}

其中writable: false就代表该属性的值不能直接通过赋值语句修改,所以你执行a.name = 'foo'没有生效,打印仍然得到原来的函数名a。

修改方法

因为该属性的configurable为true,你可以通过Object.defineProperty方法直接修改属性值:

function a(){}
Object.defineProperty(a, 'name', {
  value: 'foo'
})
console.log(a.name) // 输出 foo

如果你需要后续多次修改name属性,也可以在配置里把writable设为true,之后就可以直接赋值修改了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 23:39:03