JS回调函数 callback的理解与使用案例分析


Posted in Javascript onSeptember 09, 2019

本文实例讲述了JS回调函数 callback的理解与使用。分享给大家供大家参考,具体如下:

基本理解一个概念

回调函数回头再调用函数,等主干事情干完了,再回头干分支上的事情。

官方定义

A callback is a function that is passed as an argument to another function and is executed after its parent function has completed.

实例1

//定义主函数,回调函数作为参数
function A(callback) {
  callback();
  console.log('我是主函数');
}
//定义回调函数
function B(){
  setTimeout("console.log('我是回调函数')", 3000);//模仿耗时操作
}
//调用主函数,将函数B传进去
A(B);

输出结果:

我是主函数
我是回调函数

实例2

function a() {
  console.log("执行a函数");
  setTimeout(function(){
      console.log("执行a函数的延迟函数");
  },1000);
  function b() {
    console.log("执行函数b");
  );
  a();
  b();
};

输出结果

以上代码会先执行函数a,而且不会等到a中的延迟函数执行完才执行函数b, 在延迟函数被触发的过程中就执行了函数b,当js引擎的event 队列空闲时才会去执行队列里等待的setTimeout的回调函数,这就是一个异步的例子

调用 setTimeout 函数会在一个时间段过去后在队列中添加一个消息。这个时间段作为函数的第二个参数被传入。如果队列中没有其它消息,消息会被马上处理。但是,如果有其它消息,setTimeout 消息必须等待其它消息处理完。因此第二个参数仅仅表示最少的时间 而非确切的时间

所以即使,时间设置为0,也是会照样先执行函数b

结语

回调函数广泛运用在同步(sync)和异步(async)

常见的:

还需要深挖:js单线程和js异步

浏览器常驻三大线程: js引擎线程,GUI渲染线程,浏览器事件触发线程

更多关于JavaScript相关内容可查看本站专题:《JavaScript常用函数技巧汇总》、《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
突发奇想的一个jquery插件
Nov 19 Javascript
jQuery之自动完成组件的深入解析
Jun 19 Javascript
javascript手工制作悬浮菜单
Feb 12 Javascript
javaScript中slice函数用法实例分析
Jun 08 Javascript
jquery实现最简单的滑动菜单效果代码
Sep 12 Javascript
Bootstrap每天必学之缩略图与警示窗
Nov 29 Javascript
如何解决easyui自定义标签 datagrid edit combobox 手动输入保存不上
Dec 26 Javascript
Vue2递归组件实现树形菜单
Apr 10 Javascript
使用vue实现各类弹出框组件
Jul 03 Javascript
解决vue.js提交数组时出现数组下标的问题
Nov 05 Javascript
详解vue 中 scoped 样式作用域的规则
Sep 14 Javascript
如何利用React实现图片识别App
Feb 18 Javascript
世界上最短的数字判断js代码
Sep 09 #Javascript
JavaScript中判断为整数的多种方式及保留两位小数的方法
Sep 09 #Javascript
javascript删除数组元素的七个方法示例
Sep 09 #Javascript
微信小程序 select 下拉框组件功能
Sep 09 #Javascript
移动端手指操控左右滑动的菜单
Sep 08 #Javascript
swiper Scrollbar滚动条组件详解
Sep 08 #Javascript
js实现移动端tab切换时下划线滑动效果
Sep 08 #Javascript
You might like
php中的一个中文字符串截取函数
2007/02/14 PHP
php include和require的区别深入解析
2013/06/17 PHP
ThinkPHP打水印及设置水印位置的方法
2016/10/14 PHP
PHP 断点续传实例详解
2017/11/11 PHP
Jquery 常用方法经典总结
2010/01/28 Javascript
商城常用滚动的焦点图效果代码简单实用
2013/03/28 Javascript
JS限制Textarea文本域字符个数的具体实现
2013/08/02 Javascript
jquery实现点击消失的代码
2014/03/03 Javascript
jQuery 判断图片是否加载完成方法汇总
2015/08/10 Javascript
Bootstrap前端开发案例一
2016/06/17 Javascript
jQuery实现div横向拖拽排序的简单实例
2016/07/13 Javascript
JS实现数字格式千分位相互转换方法
2016/08/01 Javascript
Vue系列:通过vue-router如何传递参数示例
2017/01/16 Javascript
解决vue中使用Axios调用接口时出现的ie数据处理问题
2018/08/13 Javascript
详解Vue-axios 设置请求头问题
2018/12/06 Javascript
vue2.0+SVG实现音乐播放圆形进度条组件
2019/09/21 Javascript
Vue v-for循环之@click点击事件获取元素示例
2019/11/09 Javascript
在Python编程过程中用单元测试法调试代码的介绍
2015/04/02 Python
简单介绍Python的Django框架的dj-scaffold项目
2015/05/30 Python
Django的URLconf中使用缺省视图参数的方法
2015/07/18 Python
Python建立Map写Excel表实例解析
2018/01/17 Python
Python全排列操作实例分析
2018/07/24 Python
Python逐行读取文件中内容的简单方法
2019/02/26 Python
cProfile Python性能分析工具使用详解
2019/07/22 Python
MCM英国官网:奢侈皮具制品
2017/04/18 全球购物
P/Invoke是什么
2015/07/31 面试题
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
2012/05/30 面试题
建筑设计所实习生自我鉴定
2013/09/25 职场文书
法学毕业生自荐信
2013/11/13 职场文书
廉洁自律承诺书
2014/03/27 职场文书
法制宣传标语集锦
2014/06/25 职场文书
党的群众路线教育实践活动领导班子整改方案
2014/10/25 职场文书
安阳殷墟导游词
2015/02/10 职场文书
工作简报怎么写
2015/07/21 职场文书
解决Pytorch中关于model.eval的问题
2021/05/22 Python
 Python 中 logging 模块使用详情
2022/03/03 Python