ES6 中函数参数的默认值

· 约 4 分钟读完

在 ES6 中,函数的参数可以设置默认值,这为我们编写更加简洁、易读、易维护的代码提供了便利。本文将详细介绍 ES6 中函数参数默认值的用法和指导意义。

基本用法

在 ES6 之前,我们通常使用以下方式为函数参数设置默认值:

这种方式的问题在于,当 x 或 y 的值为 false、null、undefined、'' 等 falsy 值时,会被视为没有传递参数,进而使用默认值。这可能会导致一些意想不到的错误,例如:

ES6 中,我们可以使用如下方式为函数参数设置默认值:

这种方式会将 x 和 y 的默认值分别设置为 0。如果调用 foo 时不传递参数,x 和 y 将使用默认值 0:

默认值表达式

函数参数的默认值可以是任意表达式,例如:

在这个例子中,x 的默认值为 1 + 1,即 2,y 的默认值为 x + 1,即 3。

需要注意的是,函数参数的默认值是在函数调用时求值的,而不是在函数定义时求值的。这意味着,如果默认值是一个变量,那么该变量在每次函数调用时都会重新求值:

默认值的暂时性死区

函数参数的默认值存在暂时性死区(Temporal Dead Zone,简称 TDZ)。在函数体内,如果尝试访问未初始化的函数参数,将会抛出一个 ReferenceError 异常:

在这个例子中,x 的默认值表达式中访问了未初始化的参数 y,因此会抛出 ReferenceError 异常。

需要注意的是,如果函数参数的默认值是一个函数调用,那么该函数调用会在每次函数调用时执行:

在这个例子中,函数 bar 是作为 x 的默认值,因此会在每次函数调用时执行。

指定 undefined 以使用默认值

如果想要使用函数参数的默认值,但是又不想使用默认值的话,可以将参数的值显式指定为 undefined:

在这个例子中,x 的值被显式指定为 undefined,因此使用了默认值 1。

小结

ES6 中,函数参数的默认值为我们编写更加简洁、易读、易维护的代码提供了便利。在使用函数参数默认值时,需要注意以下几点:

  • 函数参数默认值的求值时机是在函数调用时,而不是在函数定义时。
  • 函数参数默认值存在暂时性死区,访问未初始化的函数参数会抛出 ReferenceError 异常。
  • 函数参数默认值可以是任意表达式,包括函数调用。
  • 如果想要使用函数参数的默认值,但是又不想使用默认值的话,可以将参数的值显式指定为 undefined。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d103c3a941bf7134231a83