默认参数是 ECMAScript 2015 引入的一个新特性。它使得我们在函数参数中指定默认值变得更加简单和直观。然而,为了正确使用默认参数,我们需要注意一些细节。本文中,我们将详细介绍这些注意事项,并提供一些示例代码。
基本语法
在 ECMAScript 2015 中,我们可以通过在函数参数中给定默认值来定义默认参数。例如:
function foo(a = 1, b = 2) { console.log(a, b); }
在上面的例子中,a
和 b
都有默认值,如果调用 foo()
,则会输出 1 2
。如果只传递一个参数,比如 foo(3)
,则会输出 3 2
。如果传递两个参数,比如 foo(3, 4)
,则会输出 3 4
。
注意事项
必须在参数列表末尾
默认参数必须在函数参数列表的末尾定义。换句话说,如果在定义默认参数的时候,中间省略了某个参数,那么后面的参数就必须指定默认值。
// 正确写法 function foo(a, b = 2, c = 3) {} // 错误写法 function bar(a = 1, b, c = 3) {}
使用 undefined 触发默认值
如果没有传递参数,或传递了 undefined
,则默认值会生效。如果传递的参数为 null
或者空字符串 ''
,则默认值不会生效。
function baz(a = 1, b = 2) { console.log(a, b); } baz(); // 输出 1 2 baz(undefined); // 输出 1 2 baz(null); // 输出 null 2 baz(''); // 输出 '' 2
立即执行函数作用域
默认参数会在函数的立即执行函数作用域(immediately invoked function expression scope)中进行求值。这意味着,我们可以在默认参数中访问其他参数和函数作用域内的变量。
function qux(a = 100, b = a + 1) { console.log(a, b); } qux(); // 输出 100 101 qux(200); // 输出 200 201
不会影响 arguments 对象
如果函数使用了默认参数,那么这些默认参数并不会被包含在 arguments 对象中。arguments 对象中只会包含传递的参数。
function quux(a = 1, b = 2) { console.log(arguments); } quux(3); // 输出 [3]
总结
默认参数是一个非常方便的特性,可以使我们在编写代码时更加简洁,减少不必要的判断。使用默认参数需要遵循一些注意事项,最好在编写代码时仔细思考才能更好地使用它们。
示例代码
-- -------------------- ---- ------- -- ---------- ----- --- - -- - -- - - -- -- - - -- -- --------- ----- ------- - -- ---- - --------- - - --- -- ------------------ -- ----------- ----- --------------- - - ----- ------- ------------ --- -- ----- ----------- - -------- - --- -- - ----- - ---- - --------------------- ----------- - --------------------------- - - -------- ------ ------- -------------- ------------------------------- --
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645f4d9b968c7c53b0159af2