使用解构赋值和默认变量的其余语法

时间:2017-07-05 15:49:52

标签: javascript ecmascript-6

以下是尝试根据第一个参数设置参数的默认值:



function tree(values, ...[[curr] = values]) {
    console.log(curr);
}
    
tree(['foo']); // foo
tree(['foo'], ['bar']); // bar 




它似乎有用(实际上它并非完全我想要的东西,但我想首先理解这一点)。

这里发生了什么?

2 个答案:

答案 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(查找标题为“默认参数可用于以后的默认参数”的部分)