Skip to content

函数是一等公民 (First-Class Functions)

1. 定义

在编程语言中,如果函数被视为“一等公民”(First-Class Citizen),意味着函数与其他数据类型(如数字、字符串、对象)具有同等的地位。

具体来说,函数可以:

  1. 赋值给变量
  2. 作为参数传递给其他函数
  3. 作为其他函数的返回值

这是实现高阶函数回调闭包等高级特性的基础。

2. 示例

2.1 赋值给变量

javascript
/* 函数声明 */
function sayHello() {
  console.log("Hello!");
}

/* 函数表达式:赋值给变量 */
const greet = function() {
  console.log("Hi there!");
};

/* 箭头函数 */
const shout = () => console.log("HEY!");

const arr = [sayHello, greet, shout]; // 甚至可以存放在数组中
arr[1](); // "Hi there!"

2.2 作为参数传递 (Callback)

这在异步编程和数组方法中非常常见。

javascript
function callWithLog(fn) {
  console.log("Before execution");
  fn();
  console.log("After execution");
}

callWithLog(() => console.log("Executing..."));
// Output:
// Before execution
// Executing...
// After execution

2.3 作为返回值

这是闭包和柯里化的基础。

javascript
function createMultiplier(multiplier) {
  return function(x) {
    return x * multiplier;
  };
}

const double = createMultiplier(2);
const triple = createMultiplier(3);

console.log(double(5)); // 10
console.log(triple(5)); // 15

3. 为什么重要?

如果函数不是一等公民(例如在早期的 Java 或 C 语言中),我们需要使用接口、匿名类或函数指针来模拟类似行为,代码会变得冗长且死板。

JavaScript 的这一特性使得函数式编程成为可能,允许我们像处理数据一样处理行为(Logic as Data)。

MIT Licensed | Keep Learning.