回调函数

c/c++中的一些回调函数(callback)的理解

≡放荡痞女 提交于 2020-02-12 23:01:08
回调函数分为异步回调和同步回调两种,我们一般来说用的都是用异步的回调,使用我们下面强调一下异步的! 异步: 异步回调函数——最核心的作用可以用一个生活中网购的例子来说明: 比如我在网上买了一样东西,就像程序中执行了一个任务(多用于线程中),但是我有不知道这个任务什么时候执行完成,如果我不用回调函数,那么我需要一直去等待,或者说定时去询问这个任务是否已经完成,这样就产生了多余的开支。但是回调函数却可以规避这样的开销,只要我们开启这个任务的时候传入一个设置好的函数指针,这个指针又指向我们早已实现好的回调函数,当任务完成是,即会自动调用这个回调函数,完成相应的反馈,现实中就是买了东西之后我们只要将电话号码告诉卖家,当快递到达是自然会通知我们,然后我们完成相应的取快递动作即可。 下面是异步回调的例子: https://blog.csdn.net/FlayHigherGT/article/details/104286558 同步: 比如一个for循环,里面的函数有我们自己实现了传入进去,就像下面包装的这个遍历函数,传入的func就是我们每次遍历需要做的事情以及传入的参数,这样的一个函数就是同步的回调函数。 来源: CSDN 作者: GT19930910 链接: https://blog.csdn.net/FlayHigherGT/article/details/104286160

ES6之Promise对象

 ̄綄美尐妖づ 提交于 2020-02-12 17:58:21
Promise是异步编程的一种解决方案。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。 Promise 异步操作有三种 状态 :pending(进行中)、fulfilled(已成功)和 rejected(已失败)。除了异步操作的结果,任何其他操作都无法改变这个状态。 Promise 对象只有:从 pending 变为 fulfilled 和从 pending 变为 rejected 的状态改变。只要处于 fulfilled 和 rejected ,状态就不会再变了即 resolved(已定型)。 const p1 = new Promise(function(resolve,reject){ resolve('success1'); resolve('success2'); }); const p2 = new Promise(function(resolve,reject){ resolve('success3'); reject('reject'); }); p1.then(function(value){ console.log(value); // success1 }); p2.then(function(value){ console.log(value); // success3 }); 状态的缺点为: 1.无法取消 Promise

Javascript -- 数组迭代方法学习

六眼飞鱼酱① 提交于 2020-02-12 00:26:54
一、数组迭代方法 1、forEach 调用 arr.forEach((value, index) => { console.log(value, index) }) forEach 是循环遍历一遍数组的每一项,这个是没有返回值的,这个方法里面有个回调函数,回调函数有两个参数,第一个是数组每一项的值 value ,第二个参数是数组每一项对应的下标索引 index Tips 这个 forEahc 循环遍历和JQuery的 $.each() 方法是类似的,只不过需要注意的是$.each方法里面的回调函数的两个参数跟 forEach 方法是相反的,第一个参数是数组每一项的下标索引 index ,第二个参数才是数组每一项 的值 value 2、every 方法参考文献 调用 const boolean = arr.every((value, index, arr) => { return value==2 }) 这个数组方式有点类似短路运算 && ,可以当作是一个数组验真的方法,这个方法里面有个回调函数,这个回调函数有三个参数,第一个是测试的数组每一项,第二个是测试数组项的下标索引,第三个是测试的原数组 测试数组的每一项都会执行 every() 方法里面的回调函数,这个函数是用来校验数组的每一项是否满足指定条件,数组每一项都会执行一次回调函数,如果数组里面的所有项都满足指定条件,则返回

函数指针和回调函数

流过昼夜 提交于 2020-02-11 23:15:15
/* 指针函数 */ /* (__type__*) function(int, int)返回的是指针地址, (__type__) function(int, int)返回的是int型数据。 */ /* 函数指针 */ /* 函数指针有两个用途:调用函数和做函数的参数。 */ /* __type__ (*function)(int, int) */ /* 只是一个指针,变量指针是指向一个变量的地址, 结构体指针是指向一个结构体的首地址, 而函数指针是指向一个函数的地址, 它是一种类型,比int,char高级的类型。 */ /* 回调函数 */ int (*function)(int, int); typedef int (*pfun)(int, int); int Max(int a, int b) { return a > b ? a : b; } int Min(int a, int b) { return a < b ? a : b; } /* 函数指针调用例子 */ int Num1 = 20, Num2 = 30; function = Max; printf("Max is %d\n", function(Num1, Num2)); printf("Max is %d\n", (*function)(Num1, Num2)); function = Min; printf

函数的执行

天大地大妈咪最大 提交于 2020-02-11 19:40:18
函数在声明的时候不会被执行,在被调用的时候才会执行,比如,一个JS函数的参数是回调函数,那么传递的回调函数只是函数的声明,并不会被执行,只有被调用时才会执行。如下JS代码自定义了一个数组过滤器: 来源: https://www.cnblogs.com/-muchen-/p/12295337.html

H5C3---《购物车宣传》案例---jQuery FullPage插件

送分小仙女□ 提交于 2020-02-11 13:39:26
H5C3 《购物车宣传》案例 综合运用h5c3知识且进行一定扩展 能使用jquery完成网页常见交互行为 实际工作开发当中能应对活动宣传页 FullPage插件 插件功能介绍 基于 jQuery 的插件,它能够帮你很方便、很轻松的制作出全屏网站。 支持鼠标滚动,支持前进后退和键盘控制,多个回调函数, 支持手机、平板触摸事件,支持 CSS3 动画,支持窗口缩放,窗口缩放时自动调整, 可设置滚动宽度、背景颜色、滚动速度、循环选项、回调、文本对齐方式等等。 参考文档: http://www.dowebok.com/demo/2014/77/ 原理:window.onmousewheel = function(){ console.log('ok') }; 使用步骤 引用文件 <link rel="stylesheet" href="css/jquery.fullPage.css"> <script src="js/jquery.min.js"></script> <script src="js/jquery.fullPage.js"></script> <link rel="stylesheet" href="css/jquery.fullPage.css"> <script src="js/jquery.min.js"></script> <script src="js/jquery

ReactNative调用aar文件(附:如何打开、查看aar文件内容)

岁酱吖の 提交于 2020-02-11 10:11:39
转载请注明原文地址: http://www.cnblogs.com/ygj0930/p/7275897.html ReactNative可以用来进行一些嵌入式设备的操作终端开发,比如:ATM机、自动售卖机等。其中,最重要的一步是,怎样在ReactNative所在设备,进行一系列硬件上的操作,比如:售卖机出货、ATM机吐钱? 一:底层操作串口包装 对于机器的控制,ReactNative本身当然不可能做到。这些底层的操作一般都是用C/C++来实现的。而我们要做的,是把这些C/C++函数,包装成java接口,导出为aar文件。(注意:*.jar:只包含了class文件与清单文件,不包含资源文件,如图片等所有res中的文件。*.aar:包含所有资源,class以及res资源文件全部包含) 对于底层的操作,我们不需要关心,由厂商提供或者负责嵌入式开发的人来定义。 在ReactNative中调用aar分为两部分:首先是通过原生Android代码调用aar中的接口,包装成为可供ReactNative调用的方法;然后在ReactNative代码中调用Android代码中的对应方法。 二:Android调用aar 1:首先,我们把aar文件放到项目的android目录的一个文件夹中,比如:新建一个libs文件夹。 2:然后,在android目录下的build.gradle文件中添加这个aar包路径:

js原生的forEach()和map()以及jquery中的each()和map()他们4者的联系和区别

社会主义新天地 提交于 2020-02-11 06:53:14
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script> <script> $(function () { var arr=[1,3,5,7,9]; var obj={0:1,1:3,2:5,3:8,4:9,length:5}; // 利用原生的js的forEach()方法遍历 /* 第一个参数:当前遍历到的元素 第二个参数:当前遍历到的索引 原生的forEach一样不能遍历伪数组 */ arr.forEach(function(value,index){ console.log(index,value); }); // arr.forEach(function(value,index){ // console.log(index,value); // }) //

js的单线程和异步

泄露秘密 提交于 2020-02-11 06:25:55
引用 :https://www.cnblogs.com/woodyblog/p/6061671.html 前言 说到js的单线程(single threaded)和异步(asynchronous),很多同学不禁会想,这不是自相矛盾么?其实,单线程和异步确实不能同时成为一个语言的特性。js选择了成为单线程的语言,所以它本身不可能是异步的,但js的宿主环境(比如浏览器,Node)是多线程的,宿主环境通过某种方式(事件驱动,下文会讲)使得js具备了异步的属性。往下看,你会发现js的机制是多么的简单高效! 说说浏览器 js是单线程语言,浏览器只分配给js一个主线程,用来执行任务(函数),但一次只能执行一个任务,这些任务形成一个任务队列排队等候执行,但前端的某些任务是非常耗时的,比如网络请求,定时器和事件监听,如果让他们和别的任务一样,都老老实实的排队等待执行的话,执行效率会非常的低,甚至导致页面的假死。所以,浏览器为这些耗时任务开辟了另外的线程,主要包括http请求线程,浏览器定时触发器,浏览器事件触发线程,这些任务是异步的。下图说明了浏览器的主要线程。 图片来自popAnt 画得太好,忍不住引过来 ( http://blog.csdn.net/kfanning/article/details/5768776 ) 再说说任务队列 刚才说到浏览器为网络请求这样的异步任务单独开了一个线程

js的单线程和异步

折月煮酒 提交于 2020-02-11 06:23:18
前言 说到js的单线程(single threaded)和异步(asynchronous),很多同学不禁会想,这不是自相矛盾么?其实,单线程和异步确实不能同时成为一个语言的特性。js选择了成为单线程的语言,所以它本身不可能是异步的,但js的宿主环境(比如浏览器,Node)是多线程的,宿主环境通过某种方式(事件驱动,下文会讲)使得js具备了异步的属性。往下看,你会发现js的机制是多么的简单高效! 说说浏览器 js是单线程语言,浏览器只分配给js一个主线程,用来执行任务(函数),但一次只能执行一个任务,这些任务形成一个任务队列排队等候执行,但前端的某些任务是非常耗时的,比如网络请求,定时器和事件监听,如果让他们和别的任务一样,都老老实实的排队等待执行的话,执行效率会非常的低,甚至导致页面的假死。所以,浏览器为这些耗时任务开辟了另外的线程,主要包括http请求线程,浏览器定时触发器,浏览器事件触发线程,这些任务是异步的。下图说明了浏览器的主要线程。 图片来自popAnt 画得太好,忍不住引过来 ( http://blog.csdn.net/kfanning/article/details/5768776 ) 再说说任务队列 刚才说到浏览器为网络请求这样的异步任务单独开了一个线程,那么问题来了,这些异步任务完成后,主线程怎么知道呢?答案就是回调函数,整个程序是事件驱动的