默认参数排序错误结果

问题描述

当我尝试运行它时,我看到了一个给出错误输出的示例。我不明白为什么在按顺序提供时会得到错误的结果。在最后一次调用时,我期望 a=7,b=10。怎么了?

"use strict";

function f(a=1,b=2){ return(`a=${a},b=${b}`) }
f() // a=1,b=2
f(a=5) // a=5,b=2
f(a=7,b=10) // a=7,b=10
f(b=10,a=7) // Order is required: a=10,b=7

解决方法

提供的参数按照函数中定义的顺序进行处理。要实现类似的功能,您可以使用对象参数:

function f(prmObj){ return(`a=${prmObj.a},b=${prmObj.b}`) }

f({b: 10,a: 7})  // a=7,b=10