输出 ES8 函数默认值中的细节问题

ES8 中新增了函数默认值的语法,可以更方便地定义函数参数的默认值,从而减少代码量和提高代码可读性。但是在使用函数默认值时,需要注意一些细节问题,本文将详细介绍这些问题,帮助读者更好地理解和使用函数默认值。

函数默认值的语法

在 ES8 中,可以使用以下语法定义函数参数的默认值:

在上面的例子中,函数 foo 定义了两个参数 xy 的默认值分别为 12。当调用函数时,如果没有传递参数或者传递的参数值为 undefined,则会使用默认值。

注意事项

默认值只应用于 undefined

函数默认值只会应用于传递了 undefined 的参数。如果传递了 null 或者没有传递任何参数,则不会应用默认值。例如:

在上面的例子中,传递了 null 的参数 x 不会使用默认值,而没有传递参数的 x 会使用默认值 1

默认值是惰性求值的

函数默认值是惰性求值(lazy evaluation)的。也就是说,只有在调用函数时,如果没有传递对应的参数,则才会求值并使用默认值。例如:

在上面的例子中,第一次调用函数 baz 时,参数 x 使用了默认值 0,并且 i 的值没有改变。但是第二次调用函数 baz 时,参数 x 没有使用默认值,而是使用了 i++ 的值 1

默认值可以是表达式

函数默认值可以是任何表达式,包括函数调用和对象字面量。例如:

在上面的例子中,函数 qux 的默认值是 Math.random(),每次调用函数时都会生成一个随机数。

在上面的例子中,函数 baz 的默认值是一个对象字面量 { prop: 1 },并且每次调用函数时都会返回同一个对象。因此,第二次调用函数时,修改了对象的属性值,第三次调用函数时也会输出修改后的属性值 2

总结

在使用函数默认值时,需要注意以下几点:

  • 默认值只应用于 undefined 的参数。
  • 默认值是惰性求值的。
  • 默认值可以是任何表达式。

合理使用函数默认值可以减少代码量和提高代码可读性,但是需要注意上述细节问题,以免产生意外的结果。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65703429d2f5e1655d8eab45


纠错
反馈