js回调函数

被作为实参传入另一个函数,并在该外部函数内部调用,用以来完成某些任务的函数,称为回调函数。
回调是一个函数被作为一个参数传递到另一个函数里,在那个函数执行完后再执行。( 也即:B函数被作为参数传递到A函数里,在A函数执行完后再执行B )
例如:

function greeting(name){
	alert("hello"+name);
}
function processUserInput(callback){
	var name = prompt('请输入你的姓名');
	callback(name);
}
processUserInput(greeting);

以上范例为同步回调,它是立即执行的。

然鹅,需要注意的是,回调函数经常被用于继续执行一个异步完成后的操作,被称为异步回调。

异步callbacks

异步callbacks其实就是函数,只不过是作为参数传递给那些在后台执行的其他的函数,当那些后台运行的代码结束,就调用callback函数,通知你工作已经完成,或者其他有趣的事情发生了。使用callbacks有一点老套,在一些老派但经常使用的API里面,你经常看到这种风格。

举个例子,异步callback就是addEventListener()第二个参数

btn.addEventListener('click',()=>{
	alert('you clicked me!');
	let pElem = document.createElement('p');
	pElem.textContent = 'This is a newly-added paragraph.';
	document.body.appendChild(pElem);
});

第一个参数是侦听的事件类型,第二个就是事件发生时调用的回调函数。
当我们把回调函数作为一个参数传递给另一个函数时,仅仅是把回调函数定义作为参数传递过去,回调函数并没有立刻执行,回调函数会在包含它的函数的某个地方异步执行,包含函数负责在合适的时候执行回调函数。

回调函数用途广泛–他们不仅仅可以用来控制函数的执行顺序和函数之间的数据传递,还可以根据环境的不同,将数据传递给不同的函数。

回调地狱

一个接口的参数会需要使用另一个接口获取。比如先请求判断一个custom是否存在,存在的话就请求这个custom的信息。就像请求a的数据了之后再去请求b的数据,请求到b的数据再去请求c 的数据,多个回调函数嵌套的写法叫做回调地狱。不方便看,看代码的时候简直是噩梦。

<script src="jquery.js"></script>
$.ajax({
        url:"a.json",
        dataType:"json",
        success(data){
            $.ajax({
                url:"b.json",
                dataType:"json",
                success(data){
                    $.ajax({
                        url:"c.json",
                        dataType:"json",
                        success(data){
                           console.log(data) 
                        }
                    })
                }
            })
        }
    })

Promise对象主要把回调函数嵌套的写法变成了链式写法

<script src="jquery.js"></script>
<script>
	function fun2(url,data){
		return $.ajax({
			url,
			data,
			dataType:"json",
		})
	}
	fun2("a.json").then(res=>{
		console.log(res);
		//对数据进行操作
		return fun2("b.json");
		//需要返回一个promise对象,才能调用.then()方法;
	}).then(res=>{
		console.log(res);
	})
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值