以下是尝试根据第一个参数设置参数的默认值:
function tree(values, ...[[curr] = values]) {
console.log(curr);
}
tree(['foo']); // foo
tree(['foo'], ['bar']); // bar

它似乎有用(实际上它并非完全我想要的东西,但我想首先理解这一点)。
这里发生了什么?
答案 0 :(得分:3)
传播语法正在传播一个带有curr ...
内容的匿名数组
没有。没有任何东西被传播到数组文字中。
传播语法将其余参数捕获到正在被解构的匿名数组实例中......
是
...转换为第一个值:提供的数组(如果存在)或值。
不确定我理解。捕获的数组将被解构为目标[[curr] = values]
,它会取出第一个元素,如果不存在,则取出values
默认值,并将其分配给目标[curr]
。
正如@FelixKling评论的那样,你真的不应该这样做,而是使用
function tree(values, [curr] = values) {
console.log(curr);
}
答案 1 :(得分:0)
这是因为默认参数可以引用先前的参数。在您的示例中,您将values
解构为curr
,这就是控制台打印数组的第一个元素的原因。您可以抑制扩展运算符,结果将是相同的:
function tree(values, [curr] = values) {
console.log(curr);
}
tree(['foo']); // foo
tree(['foo'], ['bar']); // bar
第二个调用tree(['foo'], ['bar'])
发生的事情是第二个参数(['bar']
)覆盖[curr]
默认值。
如果我不够清楚,请告诉我。
参考: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Default_parameters(查找标题为“默认参数可用于以后的默认参数”的部分)