callback回调函数理解 相当于this指针
1.callback函数在微软的官方手册中是这样定义callback函数的:“callback函数是由应用程序定义而由操作系统调用的函数”。
凡是由用户设计而却由windows系统调用的函数,统称为callback函数,这些函数都有一定的类型,以配合windows的调用操作。
某些api函数以callback作为其参数之一,这些api,如settimer、linedda、enumobjects.通常这种api会在进行某 种行为之后或满足某种状态之时调用该callback函数。另外,如果类的成员函数是一个callback函数,它必须被声明为”static”,才能把 c++编译器加诸于函数的一个隐藏参数this去掉。
那为什么要去掉this指针呢?因为callback函数是给windows函数调用的,windows并不借助任何对象调用该函数。如果去掉 static的话,就会导致堆栈中有一个随机变量会成为this指针,而结果就是程序的崩溃。记住:凡在类中声明为static的东西都并不和对象结合在一起,它们是类的一部分,不属于对象。

从上面的例子可以看出,回调机制提供了非常大的灵活性。请注意,从现在开始,我们把图中的库函数改称为中间函数了,这是因为回调并不仅仅用在应用和库之间。任何时候,只要想获得类似于上面情况的灵活性,都可以利用回调。
这种灵活性是怎么实现的呢?乍看起来,回调似乎只是函数间的调用,但仔细一琢磨,可以发现两者之间的一个关键的不同:在回调中,我们利用某种方式,把回调函数像参数一样传入中间函数。可以这么理解,在传入一个回调函数之前,中间函数是不完整的。换句话说,程序可以在运行时,通过登记不同的回调函数,来决定、改变中间函数的行为。这就比简单的函数调用要灵活太多了。请看下面这段Python写成的回调的简单示例:

<script>
function a(callback){
alert("主函数执行完了!");
callback();
}
function b(){
alert("回调函数b!");
}
function c(){
alert("回调函数c!");
}
// callback函数以参数形式传递,保证变量的灵活性
a(b);
a(c);
</script>

解答:
使用函数做参数就有下面的好处:当你a(b)的时候函数b就成了回调函数,而你还可以a(c)这个时候,函数c就成了回调函数。如果你直接在函数a里调用的话,这个回调函数就被限制死了。如果你写成了function a(){...;b();}就失去了变量的灵活性。
callback回调函数理解 相当于this指针的更多相关文章
- v-if和v-show的区别以及callback回调函数的体会
今天总结一下最近一周碰到的一些问题 一.v-if和v-show的区别 v-show用的是css属性中的display="block/none",元素被隐藏了但是节点还在页面中,但是 ...
- JavaScript Callback 回调函数
JavaScript callback回调函数 你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货.在这 ...
- 关于js的callback回调函数的理解
回调函数的处理逻辑理解:所谓的回调函数处理逻辑,其实就是先将回调函数的代码 冻结(或者理解为闲置),接着将这个回调函数的代码放到回调函数管理器的队列里面. 待回调函数被触发调用的时候,对应的回调函数的 ...
- callback回调函数的理解
callback采用的设计模式是:模板模式,他的设计理念是基于面向对象中的多态的. 我们的程序中走到某个地方他会出现不一样的动作的时候,我们在这儿就使用回调函数.我们利用的就是 多态的原理,我们传递不 ...
- js 回调函数理解与应用
定义:在JavaScript中,回调函数具体的定义为:函数A作为参数(函数引用)传递到另一个函数B中,并且这个函数B执行函数A.我们就说函数A叫做回调函数.如果没有名称(函数表达式),就叫做匿名回调函 ...
- callback回调函数【转】
请给作者点赞--> 原文链接 什么是回调函数? 我们绕点远路来回答这个问题. 编程分为两类:系统编程(system programming)和应用编程(application programmi ...
- js 回调函数理解
function A(callback) { console.log('我是主函数'); setTimeout(function () { callback("我是主函数传出的") ...
- callback 回调函数
把函数a当做一个参数传入函数b <script> Array.prototype.mysort = function(callback){ let s = this; //准备向回调函数里 ...
- callback回调函数-python
链接:http://www.zhihu.com/question/19801131/answer/27459821来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 编程分 ...
随机推荐
- 15、python学习手册之:元组、文件及其他
1.使用文本来存储python对象时,必须使用转换工具把对象转成字符串 2.内置函数eval可以把字符串当做可执行程序代码:eg s = ‘[1,2,3]’ eval(s) -->[1, ...
- pt支持的格式
- 通过Rman catalog 创建及管理Oracle数据库备份
基本环境信息target DB (需备份数据库) 192.168.199.67 ORACLE_SID=zgw HOSTNAME=Oracle11 catlog DB (备份管理数据库) 192.168 ...
- 代码高亮显示——google-code-prettify
先放着,搭建完HEXO博客再来写这篇. https://code.google.com/archive/p/google-code-prettify/
- [Angular] AuthService and AngularFire integration
Config AngularFire, we need database and auth module from firebase. import {NgModule} from '@angular ...
- Altium Designer画原理图时要紧凑
之所以要紧凑,是为了方便打印到纸上,一般原理图也都用A4纸去画, 这样打印到纸上看起来不会太小,也不会太大.
- 设置cell背景色和选中色
// 设置cell的背景色 UIView *bg = [[[UIView alloc] init] autorelease]; bg.backgroundColor = [UIColor colorW ...
- MAVEN Error: Using platform encoding (GBK actually) to copy filtered resources.....
环境:Maven3.2.5+MyEclipse 2015CI 现象:在Maven编译过程中出现错误信息:Using platform encoding (GBK actually) to copy f ...
- swift开发网络篇—利用NSURLSession 发送GET和POST请求
说明:本文示例代码发送的请求均为http请求,需要对info.plist文件进行配置.如何配置,请参考https://github.com/HanGangAndHanMeimei/iOS9Adapta ...
- stm32优先级