我希望澄清一些事情.
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
任何人都可以解释为什么会这样吗?
最佳答案 将值传递给函数时,顺序很重要.在第一种情况下,您只将一个变量传递给函数.该值将分配给变量x.由于您只传递一个变量,因此假定其他参数的其余值为null.但是,由于您已为这些参数指定了默认值,因此该函数将尝试评估1 7 52,该值将解析为50.
在第二种情况下,您传递1作为变量x的值.由于参数y未被赋值,因此该函数将评估1 undefined 42,这是NaN类型.