回调地狱【Callback Hell】
前提知识点:
单线程和异步:
- JS是单线程语言,只能同时做一件事儿 (例子:做一个ajax请求去加载资源,或者说弄一个定时器,先等待1秒钟后干嘛,如果按照单线程这个只能同时做一件事儿,那么它在这个事情中,它就卡住了,卡住的话鼠标点不了,js不执行。这就是同时做一件事,这就是js单线程的本质。)
- 浏览器和node.js已支持JS启动进程,如Web Worker
- Js和DOM渲染共用同一个线程,因为JS可修改DOM结构
一、 遇到等待(网络请求,定时任务)不能卡住
二、 需要异步(解决单线程等待的问题)
三、 异步基于callback函数形式来调用的
四、 异步不会阻塞代码执行
五、 同步会阻塞代码执行
何为回调?
回调函数是必须得依赖另一个函数执行调用,它是异步执行的,也就是需要时间等待
何为回调地狱?
例子:Ajax应用,比如http请求
在不刷新浏览器的情况下,当你执行DOM事件时,比如页面上点击某链接,回车等事件操作,浏览器会悄悄向服务端发送若干http请求,携带后台可识别的参数,等待服务器响应返回数据,这个过程是异步回调的,当许多功能需要连续调用,环环相扣依赖时,它就类似下面的代码
/* mock ajax */
function request(options) {
setTimeout(function() {
var response = {
code:'success',
content: options.data
};
options.success