返回

谈谈ES6函数参数的特殊待遇

前端

函数在编程中的地位

函数在很多编程语言中都是一等公民,这意味着函数可以作为另一个函数的参数进行传递,也可以作为返回值。

一等公民的概念意味着函数具有以下特点:

  • 函数可以被赋值给变量。
  • 函数可以作为参数传递给其他函数。
  • 函数可以作为返回值。
  • 函数可以作为闭包使用。

由于函数是一等公民,因此在参数的传递上,有一些特殊待遇也不足为奇。ES6中,增加了默认参数和函数参数的解构,为函数参数的传递方式增加了更多的灵活性。

ES6的默认参数

默认参数允许我们在调用函数时,省略某些参数的值。如果省略了某个参数的值,则使用该参数的默认值。

默认参数的语法如下:

function func(param1, param2 = defaultValue) {
  // 函数体
}

例如,我们定义了一个函数func,它有两个参数:param1和param2。param2的默认值是10。

当我们调用func函数时,我们可以省略param2的值。例如:

func(1);

这等价于:

func(1, 10);

ES6的函数参数解构

函数参数解构允许我们将函数的参数值解构为变量。

函数参数解构的语法如下:

function func({param1, param2}) {
  // 函数体
}

例如,我们定义了一个函数func,它接受一个对象作为参数。对象中包含两个属性:param1和param2。

当我们调用func函数时,我们可以使用函数参数解构来解构参数对象。例如:

func({param1: 1, param2: 2});

这等价于:

function func(obj) {
  const param1 = obj.param1;
  const param2 = obj.param2;

  // 函数体
}

ES6的rest运算符

rest运算符允许我们将函数的参数值收集到一个数组中。

rest运算符的语法如下:

function func(...rest) {
  // 函数体
}

例如,我们定义了一个函数func,它接受任意数量的参数。

当我们调用func函数时,我们可以使用rest运算符来收集参数值。例如:

func(1, 2, 3, 4, 5);

这等价于:

function func(a, b, ...rest) {
  const c = rest[0];
  const d = rest[1];
  const e = rest[2];

  // 函数体
}

结语

ES6中增加的默认参数、函数参数解构和rest运算符,为函数参数的传递方式增加了更多的灵活性。这些特性可以使我们的代码更加简洁和易读。