默认参数值的顺序很重要 es6?

pet*_*gan 5 javascript ecmascript-6

我希望澄清一些事情。

ES6 为我们带来了扩展的参数处理,并使我们能够传递默认参数值。

function f (x, y = 7, z = 42) {
    return x + y + z
}

f(1) === 50
Run Code Online (Sandbox Code Playgroud)

这工作正常。但是,如果我交换参数使它们看起来像这样,(x = 7, y, z = 42)它会返回NaN.

function f (x = 7, y, z = 42) {
    return x + y + z
}

f(1) === 50
Run Code Online (Sandbox Code Playgroud)

谁能解释为什么会这样?

Mμ.*_*Mμ. 5

当您将值传递到函数中时,顺序很重要。在第一种情况下,您仅将一个变量传递给函数。该值将被分配给变量x。由于您仅传递一个变量,因此其他参数的其余值假定为 null。但是,由于您已为这些参数指定了默认值,因此该函数将尝试计算1 + 7 + 52,结果为 50。

在第二种情况下,您将 1 作为变量的值传递x。由于参数y未分配,因此该函数将评估1 + undefined + 42,这是一种NaN类型。