回调函数是将函数作为参数传入另一函数,待操作完成后再执行;JavaScript因单线程非阻塞特性依赖它处理异步任务、事件驱动及避免主线程阻塞,虽有回调地狱问题,但Promise等演进仍基于其思想。
回调函数就是把一个函数当作参数传给另一个函数,等某个操作完成后再执行它。JavaScript 常用它,是因为这门语言是单线程、非阻塞的——它不等任务做完才继续跑代码,而是先安排好“做完后干啥”,然后立刻去处理别的事。
回调函数长什么样?
它没有特殊语法,就是一个普通函数,只是被当成值传递进去。比如:
setTimeout(function() { console.log("3秒后执行"); }, 3000);这里的 function() {...} 就是回调函数,它不会立刻运行,而是在 3 秒后由 setTimeout 主动调用。
为什么 JavaScript 特别依赖回调函数?
- 异步操作天然需要“事后通知”:读文件、发网络请求、监听点击,这些操作耗时且不能卡住页面,JS 就靠回调来指定“完成时该做什么”
- 事件驱动模型的基础:按钮被点击、页面加载完毕、键盘按下……这些都不是按顺序发生的,回调让 JS 能灵活响应任意时刻的事件
- 避免主线程阻塞:如果没有回调,JS 遇到一个要等 2 秒的请求,整个页面就卡住不动——回调让它“先记下来,回头再办”
回调函数的常见问题和演进
写多了回调容易出现“回调地狱”(嵌套太深、难读难维护),所以后来发展出了 Promise、async/await。但它们底层仍是基于回调的思想——只是让写法更清晰、错误处理更统一。理解回调,是看懂现代 JS 异步逻辑的起点。

但Promise等演进仍基于其思想。






