热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

js_callback回调函数

问题背景:callback回调函数算是js里的一个大头,我之前是模仿式写代码,并没有领会到callback的本质。后来遇到了个同步异步的问

问题背景:callback回调函数算是js里的一个大头,我之前是模仿式写代码,并没有领会到callback的本质。后来遇到了个同步异步的问题,一定要弄懂callback才行,就硬着头皮总算搞懂啦~
既然代码搞定了,下面就回过头来整理一下(笑)



网上的讲解各式各样,其中我觉得讲的最好的是知乎上的一个例子:
链接:https://www.zhihu.com/question/19801131/answer/17312995

你去食堂打饭,你去了一个小炒窗口。
你跟老板说了要×××盖饭。
老板说:你是100号,喊到你的号你就来拿菜。
然后你在旁边跟同学吹牛、玩手机。。。
当你听到老板喊100号并且把菜放到窗口。
你走到窗口,拿到你的菜。

这里面就有典型的异步操作、回调函数的概念。
好吧,先搞清楚一些问题再回头分析

1.回调函数在什么场景有用?
我要在特定时候执行一个任务,至于是什么时候我自己都不知道。比如某一时间到了或者某一事件发生或者某一中断触发。
举个栗子:刚才的打饭故事中,我并不知道老板什么时候会叫我拿饭,那么在等待这段时间,我就干等着吗?当然也可以,但是会不会太无聊了些???对应到前端页面中,比如,让用户一直等待一个图片加载出来,加载过程中,用户啥也不能干,用户会骂人的吧(笑)

2.回调函数怎么起作用?
把我要执行的这个任务写成一个函数,将这个函数和某一时间或者事件或者中断建立关联。怎么个建立关联法?在事件中调用这个函数嘛。
这里写图片描述
比如这个图上,gainJSON是一个函数,它有两个参数,一个是url,是个变量;一个是callback,是个函数。那有人要问了函数也能作为另一个函数的参数吗?不好意思,JS中可以!接着,可以看到,在gainJSON这个函数里,调用了callback函数。

3.回调函数什么时候执行?
当该回调函数关心的那个时间或者事件或者中断触发的时候,回调函数将被执行。一般是触发这个时间、事件或中断的程序主体(通常是个函数或者对象)观察到有一个关注这个东东的回调函数的时候,这个主体负责调用这个回调函数。

4.回调函数有什么好处?
最大的好处是你的程序变成异步了。也就是你不必再调用这个函数的时候一直等待这个时间的到达、事件的发生或中断的发生(万一一直不发生,你的程序会怎么样?)。在此期间你可以做做别的事情,或者四处逛逛。当回调函数被执行时,你的程序重新得到执行的机会,此时你可以继续做必要的事情了。

5.回调函数有什么问题吗?
当然就会有点问题。回调函数很多情况下会附带有跨线程操作甚至于跨进程的操作,这些都是异步带来的成本。(关于这个,我下一篇博客会讲讲)


推荐阅读
  • 精选30本C# ASP.NET SQL中文PDF电子书合集
    欢迎订阅我们的技术博客,获取更多关于C#、ASP.NET和SQL的最新资讯和资源。 ... [详细]
  • Node.js 中 GET 和 POST 请求的数据处理
    本文详细介绍了如何在 Node.js 中使用 GET 和 POST 方法来处理客户端发送的数据。通过示例代码展示了如何解析 URL 参数和表单数据,并提供了完整的实现步骤。 ... [详细]
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 本文介绍如何使用Python进行文本处理,包括分词和生成词云图。通过整合多个文本文件、去除停用词并生成词云图,展示文本数据的可视化分析方法。 ... [详细]
  • 本文详细介绍了中央电视台电影频道的节目预告,并通过专业工具分析了其加载方式,确保用户能够获取最准确的电视节目信息。 ... [详细]
  • 本文详细介绍了Git分布式版本控制系统中远程仓库的概念和操作方法。通过具体案例,帮助读者更好地理解和掌握如何高效管理代码库。 ... [详细]
  • 本文探讨了如何在 PHP 的 Eloquent ORM 中实现数据表之间的关联查询,并通过具体示例详细解释了如何将关联数据嵌入到查询结果中。这不仅提高了数据查询的效率,还简化了代码逻辑。 ... [详细]
  • 本文介绍了如何利用npm脚本和concurrently工具,实现本地开发环境中多个监听服务的同时启动,包括HTTP服务、自动刷新、Sass和ES6支持。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • Mongoose 5.12.10 发布:MongoDB 异步对象模型工具的新特性与修复
    Mongoose 是一款专为异步环境设计的 MongoDB 对象模型工具,支持 Promise 和回调函数。最新版本 Mongoose 5.12.10 带来了多项修复和改进,包括查询选项中的默认值设置、嵌入式判别器填充、以及 TypeScript 定义文件的优化。 ... [详细]
  • 探讨在使用 Fast-Android-Networking 库时遇到的 addStringBody 方法无法正常工作的问题及其解决方案。 ... [详细]
  • js常用方法(1)startWithJava代码varstartsWithfunction(str,regex){if(regexundefined||strundefined|| ... [详细]
  • MainActivityimportandroid.app.Activity;importandroid.os.Bundle;importandroid.os.Handler;im ... [详细]
  • 本文详细介绍了ASP.NET缓存的基本概念和使用方法,包括输出缓存、数据缓存及其高级特性,如缓存依赖、自定义缓存和缓存配置文件等。通过合理利用这些缓存技术,可以显著提升Web应用程序的性能。 ... [详细]
author-avatar
学渣小小柱
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有