JS 一等公民函数

2025年4月2日 | 阅读 5 分钟

JavaScript 是一种动态脚本语言,允许我们以面向对象或函数式风格使用它。同样,JavaScript 的一个这样的特性就是一等公民函数。

在本节中,我们将讨论一等公民函数,它是什么,有什么用,并且还将看一些实际实现,以更精确的方式理解它的用法和工作原理。

什么是 JS 一等公民函数

一等公民函数是第一类公民,被视为第一类对象,可以存储在变量中,作为函数参数传递,从其他函数返回,拥有自己的属性。这进一步意味着这些一等公民函数支持对其他 JavaScript 对象允许的所有操作。因此,JS 一等公民函数支持以下描述的操作:

  • 可以存储为变量的值
  • 可以被另一个函数返回
  • 可以作为函数的参数传递
  • 可以存储在数组、栈或队列中
  • 可以拥有自己的属性和方法。

我们将看到这些操作的实现,并尝试更好地理解一等公民方法的用法。

存储在变量中

下面的示例代码是一等公民函数存储在变量中的实现。

在上面的代码中

  • 我们创建了一个函数并在其中传递了两个参数。
  • 之后,我们将函数赋值给一个变量,在该变量中我们没有像以前那样定义它(即没有使用括号)。
  • 那么,问题就来了,它将如何工作。答案是,我们只需要按照以下描述的方式调用变量或函数本身。

let result = add(10, 20);

在这里,我们将 add() 函数赋值给一个变量,并向其中传递了两个参数。这是一种方式。

let result = sum(10,20);

在这里,由于我们已经将 add() 函数赋值给 sum 变量,因此我们可以进一步将 sum 变量赋值给 result 并使用它,而不是使用 add() 函数。这是因为 sum 和 add 指向同一个地址。

完整的代码如下:

执行代码后,我们得到了以下输出:

JS First Class Function

将一等公民函数作为参数传递给另一个函数

正如我们所讨论的,这些一等公民函数可以存储在变量中,这意味着这些函数也像值一样工作。因此,我们也可以将它们作为参数传递给其他函数。

让我们看下面的示例来理解工作原理以及如何将其作为其他函数的参数传递。

执行代码后,我们得到了以下输出:

JS First Class Function

在上面的代码中,

  • 我们可以看到,我们创建了 sum() 函数并将函数赋值给了一个名为 'assign' 的新变量。
  • 然后,我们创建了一个 avg() 函数,在该函数中我们传递了三个变量 x、y、z,z 用于将 sum() 函数作为参数传递给 avg() 函数。这样,我们就可以将一等公民函数作为参数传递给另一个函数。

从函数中返回函数

一等公民函数只是值,所以我们也可以从函数中返回它。让我们看下面的示例代码。

输出

JS First Class Function

在上面的代码中,

  • 我们在 test() 函数内部定义并返回了另一个函数。
  • 因此,我们可以从另一个函数返回一个一等公民函数。
  • test() 函数被称为高阶函数。高阶函数是使其一等公民函数作为值返回的函数。
  • 此外,被返回的函数是匿名函数。因此,我们需要调用这个匿名函数,为此,我们有两种以下描述的方法:

方法 1:使用变量

在上面的代码中,我们使用了这种方法来调用匿名函数,此外,我们还有下面的示例代码可以帮助我们理解它:

输出

JS First Class Function

在这里,我们只是创建了一个常量变量 callFunc,并将匿名函数赋值给它。然后我们用括号调用了常量函数。

注意:在调用这样的函数时,我们需要使用另一个变量来赋值。否则,它将不会返回它正在返回的函数。如果我们不将其存储在另一个变量中而直接返回,它就会被直接返回。

方法 2:使用双括号

下面的代码示例将帮助您理解它:

输出

JS First Class Function

在上面的代码中,为了调用函数,我们使用了双括号,这类似于将函数存储到另一个变量中,然后像我们在方法 1 中所做的那样,使用单括号调用该变量。

所以,这就是关于一等公民函数的一切,我们已经更好地描述了它的用法和实现。