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

时间:2017-04-18 09:58:34

标签: javascript ecmascript-6

我希望澄清一些事情。

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

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

f(1) === 50

这很好用。但是,如果我交换参数使它们看起来像(x = 7, y, z = 42),它将返回NaN

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

f(1) === 50

任何人都可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

将值传递给函数时,顺序很重要。在第一种情况下,您只将一个变量传递给函数。该值将分配给变量<div class="wrapper"> <div class="container flex"> <h1>header h1</h1> <p>plain text</p> </div> </div>。由于您只传递一个变量,因此假定其他参数的其余值为null。但是,由于您已为这些参数指定了默认值,因此该函数将尝试评估x,该值将解析为50。

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