函数是一等公民 (First-Class Functions)
1. 定义
在编程语言中,如果函数被视为“一等公民”(First-Class Citizen),意味着函数与其他数据类型(如数字、字符串、对象)具有同等的地位。
具体来说,函数可以:
- 赋值给变量。
- 作为参数传递给其他函数。
- 作为其他函数的返回值。
这是实现高阶函数、回调、闭包等高级特性的基础。
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 execution2.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)); // 153. 为什么重要?
如果函数不是一等公民(例如在早期的 Java 或 C 语言中),我们需要使用接口、匿名类或函数指针来模拟类似行为,代码会变得冗长且死板。
JavaScript 的这一特性使得函数式编程成为可能,允许我们像处理数据一样处理行为(Logic as Data)。