回调函数是作为参数传入并由其他函数在适当时机调用的普通函数,用于支持异步操作和事件驱动;常见于 addEventListener、setTimeout、Promise 等 API 中。

JavaScript 中函数定义很简单,回调函数 本质上也是函数,特别之处在于“谁调用它”和“什么时候调用它”。
函数定义的几种常见方式
JavaScript 支持多种函数定义语法,核心都是创建可执行的代码块:
- 函数声明:用
function关键字开头,会被提升(hoisted),可在定义前调用。
function sayHello(name) {return ‘Hello, ‘ + name;} - 函数表达式:把函数赋值给变量,不会提升,必须先定义再使用。
const sayHi = function(name) {return ‘Hi, ‘ + name;}; - 箭头函数:简洁写法,没有自己的
this、arguments,也不能用作构造函数。
const add = (a, b) => a + b;
回调函数不是特殊类型,而是特殊用法
所谓“回调”,是指把一个函数作为参数传给另一个函数,并由后者在合适时机主动执行它。它没有语法上的特殊标记,只是一种设计模式。
- 回调函数通常不立即执行,而是“等一等”,比如等待点击、定时、数据加载完成之后才运行。
- 它让 JavaScript 能自然支持异步操作和事件驱动,比如:
button.addEventListener(‘click’, function() {console.log(‘ 被点了 ’); }); - 常见内置 API 都接受回调:
setTimeout、map、fetch().then()、Promise链中的then和catch。
写回调时要注意的关键点
回调看着简单,但容易出错,尤其涉及异步和 作用域 时:
立即学习“Java 免费学习笔记(深入)”;
- 避免“回调地狱”——嵌套多层回调会让代码难读难维护,可用
Promise或async/await平铺逻辑。 - 注意
this指向:普通函数作为回调传入时,this可能丢失,可用箭头函数或.bind()固定。 - 确保回调函数确实会被调用:有些 API 要求必须提供回调,漏写可能静默失败;也有些情况(如条件不满足)根本不会触发回调,需做好兜底处理。
回调的本质是“控制权移交”
你定义函数,但不决定它何时运行——把执行权交给另一个函数或系统。这种“我准备好了,你看着办”的协作方式,正是 JavaScript 灵活性和响应能力的基础。
以上就是