javascript - 在 ES6 中使用默认值和扩展语法

标签 javascript ecmascript-6 default-parameters spread-syntax

在了解 JavaScript 的特性时,我在同一个函数中使用了默认参数和扩展语法。

let whatIsThis = (a, b = 2, ...c) => {
    console.log("a = " + a, "b = " + b,"c = " + c)
}

whatIsThis(a = 1, c = [2,3,4,5,6,7,8])

运行后,我预计输出是这样的:

"a = 1"
"b = 2"
"c = 2,3,4,5,6,7,8"

但我却得到了这个:

"a = 1"
"b = 2,3,4,5,6,7,8"
"c = "

为什么这不起作用?

最佳答案

这是因为您不能将命名参数传递给 JavaScript 中的函数。当你执行 whatIsThis(a = 1, c = [2,3,4,5,6,7,8]) 时,它的真正含义是 whatIsThis(1, [2,3,4,5,6,7,8 ])(因为 a = 1 语句返回 1)。

您可以做的是将默认参数移到末尾(这通常是一个好习惯)或将您的参数包装在对象中。例如

let whatIsThis = ({a, b = 2, c}) => {
    console.log("a = " + a, "b = " + b,"c = " + c)
}

whatIsThis({a: 1, c: [2,3,4,5,6,7,8]})

关于javascript - 在 ES6 中使用默认值和扩展语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51962959/

相关文章:

javascript - NodeJS 生成器永远不会到达某一行?

c# - 编译器错误 "Default parameter specifiers are not permitted"

default-parameters - 具有多个子句的命名函数的 Elixir 默认参数

javascript - 根据复选框隐藏/显示表行

javascript - lightSlider 不是函数,wordpress

javascript - 使用类和构造函数将 JavaScript 对象基于另一个对象

javascript - 如何在 React 中设置状态来更新数组?

javascript - `this` 在默认参数下如何工作?

javascript - mongodb 模式中具有不同对象类型的数组

javascript - HTML5 旋转/动画背景