在 ES5 中,我们在函数中使用默认值通常是通过逻辑运算符实现的。但是,ES6 标准引入了默认参数与剩余参数,为我们提供了更加简洁和灵活的方式来实现类似的功能。本文将深入探讨 ES6 中的默认参数和剩余参数的相关内容,为读者提供详细和有指导意义的知识点。
默认参数
默认参数是指可以在定义函数的参数时设置一个默认值,当函数被调用但值没有被传递时,该默认值会被使用。默认参数是用于确保代码在某些情况下总是被执行的一种可靠方法。
使用方法
在函数的参数列表中为某个参数指定一个默认值,只要在参数名称后面加上等于号,再加上默认值即可。例如:
function foo(x = 10) { console.log(x); } foo(); // 10 foo(5); // 5
如果函数调用时有传递参数,则会覆盖默认参数。如果出现多个默认参数,则可以按任意顺序传递值,将默认参数保持在其默认值:
function bar(x = 10, y = 20) { console.log(x, y); } bar(); // 10, 20 bar(5); // 5, 20 bar(undefined, 5); // 10, 5
在上面的例子中,如果 x
传递了 undefined
(而不是没有传递值),默认值 10
就会被使用。
与 arguments 对象的比较
在 ES5 中,我们通常使用 arguments
对象来获取函数的参数列表。以下是一个示例:
-- -------------------- ---- ------- -------- ----- - --- ----- - -- --- ---- - - -- - - ----------------- ---- - ----- -- ------------- - ------------------- - ------ -- --- -- - ------ -- -- --- -- --展开代码
相同的函数可以使用默认参数编写得更加简洁和可读:
function sum(x = 0, y = 0, z = 0) { console.log(x + y + z); } sum(1, 2, 3); // 6 sum(1, 2, 3, 4); // 6
惰性求值
另一个有趣的特性是在指定参数默认值时,我们可以在函数体内再次调用该函数本身(或者任何其他函数或表达式)来作为默认值。这种机制使我们能够实现惰性求值,只有在需要时才计算某些复杂的值。例如:
-- -------------------- ---- ------- -------- ---------- - ------------------------ ------ --- - -------- ----- - ----------- - - ----------- - ------------- - --- - ------ --- -- - ------- -- --------- -- ------ -- --------- --------- --展开代码
在第一个调用中,我们要求 x
等于 2
,所以 getValue()
从来没有被调用。在第二个调用中,我们仍然要求 x
等于 1
,getValue()
呈现在输出中。然而,在第三个调用中,我们为 add
传递了任何值,所以两个参数值都是默认值,导致 getValue()
被调用两次。
剩余参数
在函数参数列表中,剩余参数是指可以让函数接受任意数量的参数,并将它们作为一个数组传递的参数。相对于传统的“arguments”对象,剩余参数更易于操作,并且更容易扩展。
使用方法
与默认参数相同,我们使用 ...
(单个点号) 来定义剩余参数。例如:
function myFunc(a, ...moreArgs) { console.log(a, moreArgs); } myFunc(1, 2, 3); // 1, [2, 3]
在上例中,a
是第一个参数,而 moreArgs
将表示任何其他传递的参数的数组。
比较 arguments
ES6 中的剩余参数可以让我们否决 ES5 中大多数人使用的“arguments”对象。比较以下两个实现,可以看出使用剩余参数更可读和易处理:
-- -------------------- ---- ------- -- --- -------- ---------------------- - --- ------- - ------------------------------------- --- ------ ------------------------ - ---------------- ------ ------- -- --------- -- --- -------- ---------------------- ----------- - ------ ------------------------ - ---------------- ------ ------- -- ---------展开代码
在 ES6 中,可以使用剩余参数将函数定义为一个更具表现力和易于理解的方式。
与默认参数的比较
有时候,我们会既需要默认参数,又需要剩余参数。默认参数必须是所有参数中最后一个参数,而剩余参数总是最后一个参数,所以一个函数不能同时拥有两种类型的参数。但是,我们仍然可以编写实现这种功能的代码。例如:
function func(x, y = 2, ...rest) { console.log(x, y, rest); } func(1, undefined, 3, 4); // 1, 2, [3, 4]
在此示例中,x
和 y
是默认参数,而 rest
包含任何其他传递的值。通过将 y
的值设置为 undefined
,我们可以使 x
成为第一个传递的参数,而 rest
变成剩余的参数。
总结
在 ES6 中,使用默认参数和剩余参数可以使代码更加紧凑和可读。它们使我们能够更好地使用 ES6 中的新功能,例如箭头函数,扩展符号和其他特定的功能。在编写 ES6 代码时,学习并使用默认参数和剩余参数是必不可少的部分。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e55de3f6b2d6eab30caf0a