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

ES2015及后续版本是否支持函数调用时的命名参数?

关于ES中默认参数与命名参数的替代方案

你说得没错,ES2015确实只引入了默认参数,但并没有直接支持像其他语言那样的命名参数调用语法——就是那种可以跳过前面的默认参数,直接指定后面参数值的写法,比如你举的foo(bar = 3)这种。不过后续的ES版本(直到现在)也没加入这个特性,不过我们有几个挺好用的替代方案:

1. 解构赋值优化版对象传参

你提到的传入对象的思路非常实用,现在我们可以用ES2015的解构赋值让这个写法更简洁优雅,直接在函数参数里就处理好默认值:

function foo({ baz = 0, bar = 1 } = {}) {
  // 直接使用baz和bar即可
  console.log(baz, bar);
}

// 调用时只传需要指定的参数
foo({ bar: 3 }); // 输出 0 3
foo({ baz: 5 }); // 输出 5 1
foo(); // 输出 0 1

这里要注意给解构的对象加个默认值= {},不然直接调用foo()的时候会报错,因为我们没法解构undefined。

2. 集中式默认参数管理(可选)

如果参数比较多,或者需要更灵活的配置管理,也可以结合对象合并来处理:

function foo(options = {}) {
  const defaultOptions = { baz: 0, bar: 1, qux: 2 };
  // 用传入的参数覆盖默认值
  const { baz, bar, qux } = { ...defaultOptions, ...options };
  console.log(baz, bar, qux);
}

foo({ bar: 3 }); // 输出 0 3 2

这种方式的好处是默认参数集中在一个对象里,后续修改或者扩展参数会更方便。

另外补充一点:虽然JS本身没有原生命名参数,但像TypeScript这类超集语言提供了类似的语法糖,不过编译后最终还是会转换成对象传参的形式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:29:18