JS回调函数

╰半橙微兮° 2022-03-16 06:18 364阅读 0赞

参考文章:
https://www.cnblogs.com/gaosheng-221/p/6045132.html
https://www.cnblogs.com/gaosheng-221/p/6045483.html

在JavaScript中,回调函数具体的定义为:函数A作为参数(函数引用)传递到另一个函数B中,并且这个函数B执行函数A。我们就说函数A叫做回调函数。如果没有名称(函数表达式),就叫做匿名回调函数。

因此callback 不一定用于异步,一般同步(阻塞)的场景下也经常用到回调,比如要求执行某些操作后执行回调函数。

同步中回调的例子:

一个同步(阻塞)中使用回调的例子,目的是在func1代码执行完成后执行func2。

  1. var func1=function(callback){
  2. //do something.
  3. (callback && typeof(callback) === "function") && callback();
  4. }
  5. func1(func2);
  6. var func2=function(){
  7. }

异步回调的例子:

  1. $(document).ready(callback);
  2. $.ajax({
  3. url: "test.html",
  4. context: document.body
  5. }).done(function() {
  6. $(this).addClass("done");
  7. }).fail(function() { alert("error");
  8. }).always(function() { alert("complete");
  9. });
  10. /**
  11. 注意的是,ajax请求确实是异步的,不过这请求是由浏览器新开一个线程请求,
  12. 当请求的状态变更时,如果先前已设置回调,这异步线程就产生状态变更事件放到 JavaScript引擎的处理队列中等待处理。
  13. 见:http://www.phpv.net/html/1700.html
  14. */

回调什么时候执行?

回调函数,一般在同步情境下是最后执行的,而在异步情境下有可能不执行,因为事件没有被触发或者条件不满足。

回调函数的使用场合:

1.资源加载:动态加载js文件后执行回调,加载iframe后执行回调,ajax操作回调,图片加载完成执行回调,AJAX等等。
2.DOM事件及Node.js事件基于回调机制(Node.js回调可能会出现多层回调嵌套的问题)。
3.setTimeout的延迟时间为0,这个hack经常被用到,settimeout调用的函数其实就是一个callback的体现
4.链式调用:链式调用的时候,在赋值器(setter)方法中(或者本身没有返回值的方法中)很容易实现链式调用,而取值器(getter)相对来说不好实现链式调用,因为你需要取值器返回你需要的数据而不是this指针,如果要实现链式方法,可以用回调函数来实现
5.setTimeout、setInterval的函数调用得到其返回值。由于两个函数都是异步的,即:他们的调用时序和程序的主流程是相对独立的,所以没有办法在主体里面等待它们的返回值,它们被打开的时候程序也不会停下来等待,否则也就失去了setTimeout及setInterval的意义了,所以用return已经没有意义,只能使用callback。callback的意义在于将timer执行的结果通知给代理函数进行及时处理。

回调函数的传递:

上面说了,要将函数引用或者函数表达式作为参数传递。

  1. $.get('myhtmlpage.html', myCallBack);//这是对的
  2. $.get('myhtmlpage.html', myCallBack('foo', 'bar'));//这是错的,那么要带参数呢?
  3. $.get('myhtmlpage.html', function(){//带参数的使用函数表达式
  4. myCallBack('foo', 'bar');
  5. });

另外,最好保证回调存在且必须是函数引用或者函数表达式:

  1. (callback && typeof(callback) === "function") && callback();

发表评论

表情:
评论列表 (有 0 条评论,364人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Node.js 函数

    `一、什么是Node.js 回调函数` > Node.js 异步编程的直接体现就是回调。 > 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。 >

    相关 js中的函数

    1:回调函数: 定义了,但没有调,但最终执行了 2: dom事件回调函数 定时器回调函数 ajax请求回调函数 生命周期回调函数 documen

    相关 有关js函数

    函数a有一个参数,这个参数是个函数b,当函数a执行完以后执行函数b。那么这个过程就叫回调。 其实中文也很好理解:回调,回调,就是回头调用的意思。函数a的事先干完,回头再调用函

    相关 js函数

    平常的前端开发工作中,编写js时会有很多地方用到函数的回调。 最简单的例子就是: <script language="javascript" type="text/

    相关 js函数错误

    由java后台根据判断 返回js需要调用的函数,但是在运行的时候判断为不是函数。但是检查js文件后确实有该名称的函数存在。所以添加eval()函数。不要在运行的js函数中添加,

    相关 js函数的使用

    在第一次学js的时候,估计很多人对回调函数很蒙,今天有空梳理总结下回调函数,算是一次学习,算是一次总结,也算是一次分享。 文章目录 回调函数执行流程