JavaScript中函数是一等公民,即函数与基本类型同等地位,可赋值存储、传参、返回及拥有属性方法。

JavaScript 中“函数是一等公民”,意思是函数和数字、字符串、布尔值一样,是语言中最基础、最自由的数据类型之一——它不是附属品,不依附于类或对象,而是一种可以直接操作的“值”。
能像变量一样被赋值和存储
你可以把函数直接赋给变量,放进数组、对象,甚至塞进 Map 或 Set 里:
- const greet = function(name) { return `Hello, ${name}`; };
- const handlers = [greet, () => 'Hi!', console.log];
- const config = { onClick: greet, timeout: () => clearTimeout() };
这说明函数不是“语法结构”,而是实实在在可持有、可搬运的实体。
能作为参数传给其他函数
这是回调机制和异步编程的根基。只要一个函数接受另一个函数当输入,就依赖这个特性:
立即学习“Java免费学习笔记(深入)”;
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- [1, 2, 3].map(x => x * 2); —— map 的第一个参数就是函数
- button.addEventListener('click', () => alert('clicked'));
- setTimeout(() => console.log('done'), 1000);
没有这个能力,Promise、async/await、事件处理、数组方法都难以自然实现。
能作为返回值从函数中出来
返回函数是构建高阶函数、闭包和配置化逻辑的关键方式:
-
function makeMultiplier(n) { return x => x * n; }
const double = makeMultiplier(2); double(5); // → 10 - const debounce = (fn, delay) => { let timer; return (...args) => { clearTimeout(timer); timer = setTimeout(() => fn(...args), delay); }; };
这类模式在工具函数、React Hooks、状态管理中极为常见。
函数本身也是对象,可扩展、可携带属性
函数不只是可执行代码,它还能拥有自己的属性和方法:
- function sayHi() { console.log('hi'); } sayHi.count = 0; sayHi.count++;
- sayHi.toString(); // 返回函数源码字符串
- sayHi.length; // 形参个数
这种“既是行为又是数据”的双重性,正是它成为一等公民的深层体现。

















