回调
函数的定义
回调函数是一个函数,通过函数指针调用。如果你通过函数指针作为另一个函数的
参数,当这个指针来调用函数是指,我们把它称为回调函数。回调函数并不是直接由函数调用的
执行者,而且是通过另一方在一个特定的事件或
情况发生,这是用来应对的事件或情况。
在Javascript中,回调函数是指函数作为一个参数(函数
参考)传递给另一个函数,这个函数B,B执行函数的A.Let说,函数被称为回调函数。如果没有
名字(函数),它被称为一个匿名的回调函数。因此,回调未必是用于异步,常用于
同步(阻塞)的场景,如回调函数的执行后,执行某些
操作的要求。
例子
利用回调在一个同步的一个例子(块)执行func2的func1代码执行后。
复制代码代码如下所示:
VaR func1 =函数(回调){
做某事。
(回调typeof(回调)=函数)(回调);
}
func1(还是一样的);
VaR func2 =函数(){
}
回调函数的使用
资源加载:在动态加载JS
文件执行回调函数,加载iframe执行回调,回调Ajax操作,
图片加载完成执行回调,Ajax等。
DOM事件和Node.js的事件是基于回调机制(Node.js的回调可能是一个多层回调嵌套问题)。
的setTimeout延迟时间是0,这个
程序经常被使用,和setTimeout调用函数实际上是一个回调的体现。
电话:当调用链的链,其中赋值(setter)的
方法(或方法本身不返回值)和易于实现的价值链称为(吸气)是相对不好是因为你需要调用链,该值返回到你需要的数据而不是this指针,如果你想做外链的方法可以用来实现回调函数
的setTimeout和setInterval函数调用的返回值。两函数是异步的,即:主要的过程他们通话的时间和程序是相对
独立的,因此其主要
等待他们的返回值没有办法,他们打开程序不会停止等待的时候,否则就会失去setTimeout和setInterval的意思,所以还没有意义,只有回调。回调的意义在于及时通知定时器执行结果的
代理功能。
函数也是一个对象。
了解回调函数,首先,明确功能的规则。在Javascript,一个功能是陌生的,但它确实是一个对象,一个函数是一个函数
创建的函数对象()构造函数,函数对象包含一个字符串,其中包含的功能Javascript代码。如果你把从C或java,它可能看起来很奇怪,怎么会是一个字符串的代码但对于Javascript,这是很常见的,数据和代码之间的差别非常模糊。
复制代码代码如下所示:
可以创建函数
var fn =
新功能(arg1
FN(2, 3); / 6
这种方法的一个优点是,它可以将代码传递给其他函数,也可以传递规则变量或对象(因为代码只是字面上的对象)。
传递函数作为回调函数
作为参数传递函数是很容易的。
U3000 U3000
复制代码代码如下所示:
功能(arg1,arg2,FN回调){
VaR Num = math.ceil(Math.random()*(arg1,arg2)+ 2);
回调(努姆);
传输结果
}
FN(10, 20,函数(数字){)
console.log(回调要求!编号;
};在20和10之间的随机数
这样做可能更麻烦,甚至有点笨,为什么不正常地返回结果呢但是当你不得不使用回调函数时,你可能不这么认为。
不要阻塞道路。
传统的函数的
输入参数形式的数据,并使用return语句返回的值。理论上,在函数结束时返回的返回语句,它是一个输入点和输出点的结构,这是容易理解的功能是输入输出之间的映射的过程。
但是,当函数的实现很长时,您是否选择等待函数完成
进程,还是使用回调函数进行异步
处理在这种情况下,使用回调函数非常重要,例如:Ajax请求。如果使用回调函数进行处理,代码将继续执行其他
任务,而不必等待!
下面是一个更全面的示例,说明如何使用Ajax加载XML文件,并使用调用()函数在请求对象(请求对象)上下文中调用回调函数。
U3000 U3000
复制代码代码如下所示:
函数FN(URL,回调){
VaR HttpRequest; / /创建XHR
window.xmlhttprequest HttpRequest =新XMLHttpRequest():
window.activexobject新的ActiveX对象(微软。XMLHTTP ):定义; / /功能测试IE
httprequest.onreadystatechange =函数(){
如果(httprequest.readystate = 4
httprequest.status = = = 200){ / /状态判断
callback.call(HttpRequest. responseXML之外);
}
};
HttpRequest.open(
HttpRequest.send();
}
FN(
文本),函数(调用函数)
console.log(本); / /输出语句
});
console.log(这将
运行在上述回调。); / /第一输出语句
We request asynchronous processing, meaning that when we begin to request, we tell them to call our functions when they are finished.In fact, the onreadystatechange event handler also has to consider the failure of the request. 在这里,我们假设XML文件存在,可以成功地通过
浏览器加载。在这个例子中,异步函数分配给onreadystatechange事件,所以它不会立即执行。
最后,第二console.log语句首先执行,因为回调函数直到完成请求的执行。
上面的例子不容易理解,请看下面的例子:
复制代码代码如下所示:
函数(){
var a=10;
返回函数(){
a=2;
返回一个;
};
}
var(=);
f();返回20。
f();返回40。
调用函数和变量外,还可以访问。这是因为Javascript的范围是词汇。函数运行在他们的范围定义的(在上面的例子中的foo的范围),而不是在范围内运行的功能。只要是在foo的定义,它可以访问所有的变量在foo的定义,即使在foo的执行结束。因为救了它的范围,只有返回的函数可以访问
保存的范围。返回一个镶嵌的匿名函数创建一个闭包最常用的手段。