JavaScript中一阶函数(First-order Function)与一等函数(First-class Function)是否等同?
一阶函数(First-order Function) vs 一等函数(First-class Function)
什么是一阶函数?
一阶函数就是那种既不接受其他函数作为参数,也不返回函数的普通函数。它只处理数字、字符串、对象这类基础数据类型,完全不涉及对其他函数的操作。
举个JavaScript例子:
// 计算两数之和,仅处理数字,属于一阶函数 function add(a, b) { return a + b; } // 获取字符串长度,仅处理字符串,属于一阶函数 function getStringLength(str) { return str.length; }
什么是一等函数?
一等函数是编程语言赋予函数的一种地位——把函数当作「一等公民」,意味着函数能和普通变量、基础数据一样被自由操作:
- 可以赋值给变量
- 能作为参数传递给其他函数
- 能作为另一个函数的返回值
- 能存储在数组、对象这类数据结构中
这不是函数的分类,而是语言对函数的支持特性。
二者是同一概念吗?
完全不是。
- 一阶函数是按函数的行为/操作对象划分的类别,对应的概念是「高阶函数」(接收或返回函数的函数)
- 一等函数是语言层面的特性描述,说明函数在该语言里拥有和普通值平等的权限
JavaScript中的异同点
相同点
JavaScript里所有函数都是一等公民,所以哪怕是一阶函数,也天然具备一等函数的所有特性——比如你可以把一阶函数赋值给变量、当成参数传递,这些操作都完全合法。
不同点
定义维度完全不同
- 一阶函数看的是「函数的功能范围」:只处理基础数据,不涉及其他函数的操作
- 一等函数看的是「语言对函数的权限支持」:JS允许函数像普通值一样被任意操作
覆盖范围不同
- 一阶函数是JS函数的一个子集,和高阶函数相对
- 一等函数涵盖JS里所有函数,包括一阶函数和高阶函数
代码示例区分
// 既是一阶函数,也是一等函数 const multiply = (a, b) => a * b; // 可以把它赋值给变量,也能存入数组 const mathOps = [multiply, add]; // 是一等函数,但不是一阶函数(属于高阶函数) function createMultiplier(factor) { // 返回了一个函数,属于高阶操作,但这个返回的函数依然是一等公民 return num => num * factor; } const double = createMultiplier(2); double(5); // 输出10
内容的提问来源于stack exchange,提问作者Jackson
相关产品推荐
相关产品推荐

