函数的 JavaScript 默认参数
Posted
技术标签:
【中文标题】函数的 JavaScript 默认参数【英文标题】:JavaScript default parameters for function 【发布时间】:2017-02-07 15:24:45 【问题描述】:我完全可以理解 ECMAScript 6 已经创造了很多潜在的方法来处理诸如箭头函数之类的函数。
由于我对新事物不是很熟悉,所以在谈论函数的默认参数时。如何解释以下定义函数的方式之间的差异:
功能1:
function m1(x = 0, y = 0 = )
return [x, y];
功能2:
function m2(x, y = x: 0, y: 0 )
return [x, y];
【问题讨论】:
我认为使用 javascript 你可以用另一种方法来做到这一点。它类似于函数 m1(x) x || (x=0); @lsqleakey 你在问如何在 ES6 中使用默认变量创建箭头函数吗? 【参考方案1】:当您尝试将某些内容传递给您的函数时,区别就很明显了:
m1() // [0, 0]
m1(z: 1) // [0, 0]
m1(x: 1) // [1, 0]
m2() // [undefined, undefined]
m2(z: 1) // [undefined, undefined]
m2(x: 1) // [1, undefined]
您的第一个语法 (m1(x = 0, y = 0 = )
) 做了三件事:
m1()
),则使用默认的空对象(即变为 m1()
)
其次,您的代码从该对象中提取 x
和 y
属性。
如果其中一个是undefined
,则为其赋予默认值0
。
m2(x, y = x: 0, y: 0 )
做了一些完全不同的事情:
x: 0, y: 0
。如果没有传递第一个参数,则使用该对象。如果传递了 undefined
以外的任何参数,则使用该值。
其次,代码从该对象中提取x
和y
属性。如果他们是undefined
,那就是你会得到的。
第一个选项(具有默认值的参数,使用更多默认值进行解构)几乎可以肯定是您想要的。第二个选项意味着如果传递参数,您的代码没有合理/有用的属性默认值。
【讨论】:
m2()
将产生[0,0]
。 m2()
将是 [undefined, undefined]
@CodingIntrigue 谢谢:这当然是我的意思。
假设如此,很好的解释,很好的分解【参考方案2】:
m1
为x
和y
提供默认值,而m2
仅从提供的对象中解构x
和y
,并且仅在未提供对象本身时提供默认值:
m1()
将返回 [0, 0]
m2()
将返回 [undefined, undefined]
m1()
和 m2()
都将返回 [0, 0]
m1(x: 10)
将返回 [10, 0]
m2(x: 10)
将返回 [10, undefined]
因此,如果m2
接收到一个对象,它会将可用值解构为变量x
和y
。如果缺少其中任何一个,则为undefined
。只有当整个对象丢失时,它才会提供一个默认对象 ( x: 0, y: 0
) 以从中获取值。
m1
但是,即使两个属性都缺失了,它们也会提供默认值。如果整个对象丢失,它仍然会提供这些默认值。
【讨论】:
以上是关于函数的 JavaScript 默认参数的主要内容,如果未能解决你的问题,请参考以下文章