ES8 中新增了函数默认值的语法,可以更方便地定义函数参数的默认值,从而减少代码量和提高代码可读性。但是在使用函数默认值时,需要注意一些细节问题,本文将详细介绍这些问题,帮助读者更好地理解和使用函数默认值。
函数默认值的语法
在 ES8 中,可以使用以下语法定义函数参数的默认值:
function foo(x = 1, y = 2) { console.log(x, y); } foo(); // 1, 2 foo(3); // 3, 2 foo(undefined, 4); // 1, 4
在上面的例子中,函数 foo
定义了两个参数 x
和 y
的默认值分别为 1
和 2
。当调用函数时,如果没有传递参数或者传递的参数值为 undefined
,则会使用默认值。
注意事项
默认值只应用于 undefined
函数默认值只会应用于传递了 undefined
的参数。如果传递了 null
或者没有传递任何参数,则不会应用默认值。例如:
function bar(x = 1) { console.log(x); } bar(null); // null bar(); // 1
在上面的例子中,传递了 null
的参数 x
不会使用默认值,而没有传递参数的 x
会使用默认值 1
。
默认值是惰性求值的
函数默认值是惰性求值(lazy evaluation)的。也就是说,只有在调用函数时,如果没有传递对应的参数,则才会求值并使用默认值。例如:
let i = 0; function baz(x = i++) { console.log(x); } baz(); // 0 baz(); // 1
在上面的例子中,第一次调用函数 baz
时,参数 x
使用了默认值 0
,并且 i
的值没有改变。但是第二次调用函数 baz
时,参数 x
没有使用默认值,而是使用了 i++
的值 1
。
默认值可以是表达式
函数默认值可以是任何表达式,包括函数调用和对象字面量。例如:
function qux(x = Math.random()) { console.log(x); } qux(); // 随机数 qux(); // 随机数
在上面的例子中,函数 qux
的默认值是 Math.random()
,每次调用函数时都会生成一个随机数。
function baz(x = { prop: 1 }) { console.log(x.prop); } baz(); // 1 baz().prop = 2; baz(); // 2
在上面的例子中,函数 baz
的默认值是一个对象字面量 { prop: 1 }
,并且每次调用函数时都会返回同一个对象。因此,第二次调用函数时,修改了对象的属性值,第三次调用函数时也会输出修改后的属性值 2
。
总结
在使用函数默认值时,需要注意以下几点:
- 默认值只应用于
undefined
的参数。 - 默认值是惰性求值的。
- 默认值可以是任何表达式。
合理使用函数默认值可以减少代码量和提高代码可读性,但是需要注意上述细节问题,以免产生意外的结果。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65703429d2f5e1655d8eab45