首页 > callback是一个参数还是一个函数?

callback是一个参数还是一个函数?

callback是一个参数还是一个函数?什么情况下用?怎么用?
有代码例子可供参考吗?网上搜的都不好用,也太乱,看不懂。


可以了解一下c里面的函数指针

简单来说一个函数在内存中就是一段程序的入口,那么它就会有一个起始地址,假如我们把一个叫做DoSomething的函数的起始地址赋给一个叫做oneFunction的变量,那么我们就可以用oneFunction这个变量来访问DoSomething这个函数,oneFunction就是DoSomething函数的一个引用。

那么回调函数呢,这个名字其实含义很模糊,什么叫回调?“调”好说,函数调用嘛,“回”是个毛线意思?回到那里去?这里最好还是举个例子来说明。
我们在javascript里面尝试去简单的封装原生的ajax过程,比如封装了一个get请求,那么肯定要输入ajax get目标的地址吧,那么其中一个参数就是目标地址。ajax get之后返回的结果要传回我们的主程序那里吧,但是针对不同的情况,我们希望能够对返回的结果做不同的处理,那么这不同的处理过程就要写成不同的函数。

此时我们有两种选择,一个是在封装好的ajax函数里写switch case语句,输入不同的参数来使用不同的处理过程,但是缺点是处理过程被写在了ajax函数里面,脱离了主程序,调试查看修改都不方便。
那么我们就使用上面提到的函数引用的方式,在主程序里写这个处理函数,然后把他的引用传递到ajax函数里面,如果需要的话,还可以附带处理函数所在的上下文的一些变量,比如this指针啊这些东西,这样子函数既可以获得ajax函数上下文中的变量,也可以修改它本身所在的代码段上下文的内容,比如我们可以把处理的结果直接通过this指针赋值给主程序的某个变量,那么就不需要ajax函数用return来返回什么东西了,这个东西正常c语言的教程里都会有的,就是有关return能否返回多个变量的问题那里。回头来看回调函数这个名字,那么所谓的“回”,就是回到函数主程序里面的意思了


首先,请问题主:数字可以当参数吗?可以。字符串可以当参数吗?可以。对象可以当参数吗?可以。函数是不是对象?是。那么函数当参数吗?

其次,什么时候使用函数当参数。

一是,异步函数。异步函数经常用函数做参数,因为异步函数没办法把一个异步操作的结果以返回值的形式返回,此时可以通过回调函数的形式返回结果,或者仅仅是告诉你异步操作结束了。

比如:

$.get('...', function(resp) {
    console. log(resp)
})

ajax请求是异步的,没办法将请求直接返回,需要借助回调函数取到响应。

二是,不论异步函数还是同步函数,当某个函数需要一个“行为”作为参数时,那么就需要使用回调函数做参数,因为函数可以表示行为。

比如,setTimeout函数:表示一段时间后做某事。“做某事”是不是一个行为?所以需要提供一个回调函数表示要做的事情。

再比如,数组的map方法:表示对一个数组中的元素执行一项变换,得到一个新的数组。“执行一项变换”是不是一个行为?所以也需要提供一个回回调函数。

三是,函数式编程。函数式编程惯用函数做参数和返回值。这里面涉及的思想博大精深,我所知有限,不能尽述。


本身是一个函数,同时作为某个函数的参数


callback是参数,这里可以是以下三种形式:


参数跟函数并不冲突啊

函数可以有参数,参数可以是函数。哈哈哈


一般在异步操作的时候需要用到callback。


他是一个参数也是一个函数


作为新手,我的理解是:在当前函数
Function fun(Type type,callback)这里callback是参数,但同时从它本身来看,它是一个回调函数,就是fun函数执行完以后会调用的一个函数,有时候可以用来返回一些函数执行情况,
大体上来看应该是这样的:
Function fun(Type type,function{...
})
刚学,不喜勿喷


callback多数时候指的是,在异步调用的时候,我们可能需要知道这个异步调用什么时候结束,并且可能在异步调用结束的时候做点什么额外的事情,这里这个额外的事情,就是callback,他通常是一个函数,封装了你要做的“额外的事情”,然后他通常是以参数的形式,传给了你要控制的异步调用。

举例时间:

//setTimeout是个异步调用,用来推迟执行某些操作
/假设我们现在希望5秒后输出一个hello world

//先定义一个callback函数叫print,函数封装了输出hello world的操作
var print = function(){
    console.log('hello world');
};

//再使用setTimeout异步调用,并且把print函数作为参数传给她
setTimeout(print, 5000);

//好了,现在你等5秒中,就能看到hello world被输出了
【热门文章】
【热门文章】