首页

文章

关于回调函数的详细讲解

发布网友 发布时间:2022-04-19 20:08

我来回答

2个回答

懂视网 时间:2022-04-20 18:21

使用canvas API 内置的几个简单命令可以轻松地为canvas 添加图片内容,应当注意: 必须等到图片完全加载后才能对其进行操作, 浏览器通常会在页面脚本执行的同时异步加载图片。 如果试图在图片未完全加载之前就将其呈现到canvas 上,将不会显示任何图片. 以下示例将加载一张树皮纹理的图片 作为树干以供 canvas 使用. 为保证在呈现之前图片忆完全加载, 这里提供了回调方法, 即仅当图像加载完 时才执行后续代码<!DOCTYPE html> <html> <title>Image example</title> <canvas id="trails" style=&

1. HTML5 之6 __Canvas: 插入图片, 图片加载完时执行回调

简介:以下示例将加载一张树皮纹理的图片 作为树干以供 canvas 使用. 为保证在呈现之前图片忆完全加载, 这里提供了回调方法, 即仅当图像加载完 时才执行后续代码

2. javascript some()函数用法详解,javascriptsome_PHP教程

简介:javascript some()函数用法详解,javascriptsome。javascript some()函数用法详解,javascriptsome 参数说明 callback: 要对每个数组元素执行的回调函数。 thisObject : 在执行回调函数时定义的this对

3. javascript some()函数用法详解,javascriptsome

简介:javascript some()函数用法详解,javascriptsome。javascript some()函数用法详解,javascriptsome 参数说明 callback: 要对每个数组元素执行的回调函数。 thisObject : 在执行回调函数时定义的this对

4. javascript - AJAX是怎么样实现异步的呢?

简介:AJAX的方法源码我看过,就是AJAX方法里面调用一个回调,先执行AJAX方法再执行回调,这跟普通的的引用函数 有什么区别呢?那么AJAX的异步回调在体验在哪里;

5. php dwt 写的jquery不执行回调,html可以执行回调,请大神们指教。

简介:模版文件dwt 写了如下js代码,为什么没有回调,写在html 里就可以回调 ``` function getVal() { $.getJSON("bus_sel.php", { sf_id : $("#sf_id").val() }, function(json) { alert(1111); var ds_id = $("#ds_id"); $.each(json, function(index, array) { alert(&q

6. JQuery中的$.getJSON 使用说明_jquery

简介:jQuery中常用getJSON来调用并获取远程的JSON字符串,将其转换为JSON对象,如果成功,则执行回调函数。

7. jquery的$getjson调用并获取远程的JSON字符串问题_javascript技巧

简介:jQuery中常用getJSON来调用并获取远程的JSON字符串,将其转换为JSON对象,如果成功,则执行回调函数,本文将详细介绍,需要的朋友可以参考下

8. Extjs4 消息框去掉关闭按钮(类似Ext.Msg.alert)_extjs

简介:类似Ext.Msg.alert();但没有关闭按钮,由于Extjs4消息框中的关闭按钮,没有执行回调函数,点击关闭按钮后,直接关闭窗口,接下来为大家详细介绍下去掉关闭按钮

9. JS动态插入并立即执行回调函数的方法_javascript技巧

简介:这篇文章主要介绍了JS动态插入并立即执行回调函数的方法,实例分析了动态插入js文件及执行回调函数的相关技巧,需要的朋友可以参考下

【相关问答推荐】:

javascript - wx.getLocation无法正确执行回调,估计是作用域的原因

javascript - 循环中的$.post()在循环结束才开始执行回调函数

javascript - js文件如何按需加载?

前端 - 请用javascript这种情况是否需要手动释放对象

javascript - angularjs ocLazyLoad加载回调问题

热心网友 时间:2022-04-20 15:29

回调函数2010年03月09日 星期二 上午 10:20
对指针的应用是C语言编程的精髓所在,而回调函数就是C语言里面对函数指针的高级应用。简而言之,回调函数是一个通过函数指针调用的函数。如果你把函数指针(函数的入口地址)传递给另一个函数,当这个函数指针被用来调用它所指向的函数时,我们就说这个函数是回调函数。
为什么要使用回调函数呢?我们先看一个小例子:
Node * Search_List (Node * node, const int value)
{
while (node != NULL)
{
if (node -> value == value)
{
break;
}
node = node -> next;
}
return node;
}

这个函数用于在一个单向链表中查找一个指定的值,返回保存这个值的节点。它的参数是指向这个链表第一个节点的指针以及要查找的值。这个函数看上去很简单,但是我们考虑一个问题:它只能适用于值为整数的链表,如果查找一个字符串链表,我们不得不再写一个函数,其实大部分代码和现在这个函数相同,只是第二个参数的类型和比较的方法不同。

其实我们更希望令查找函数与类型无关,这样它就能用于查找存放任何类型值的链表了,因此必须改变比较的方式,而借助回调函数就可以达到这个目的。我们编写一个函数(回调函数),用于比较两个同类型的值,然后把一个指向这个函数的指针作为参数传递给查找函数,查找函数调用这个比较函数来执行比较,采用这个方法,任何类型的值得都可以进行比较。

我们还必须给查找函数传递一个指向待比较的值的指针而不是值本身,也就是一个void *类型的形参,这个指针会传递给回调函数,进行最终的比较。这样的修改可以让我们传递指向任何类型的指针到查找函数,从而完成对任何类型的比较,这就是指针的好处,我们无法将字符串、数组或者结构体作为参数传递给函数,但是指向它们的指针却可以。

现在,我们的查找函数就可以这样实现:
NODE *Search_List(NODE *node, int (*compare)(void const *, void const *) , \
void const *desired_value);
{
while (node != NULL)
{
if (compare((node->value_address), desired_value) == 0)
{
break;
}
node = node->next;
}
return node;
}

可以看到,用户将一个函数指针传递给查找函数,后者将回调这个函数。
注意这里我们的链表节点是这样定义的:

typedef struct list
{
void *value_address;
struct list *next;
}NODE;

这样定义可以让NODE *类型的指针指向存储任何类型数据的链表节点。而value_address就是指向具体数据的指针,我们把它定义为void *,表示一个指向未知类型的指针,这样链表就可以存储任何类型的数据了,而我们传递给查找函数Search_List的第一个参数就可以统一表示为:NODE *,否则,还是要分别写查找函数以适应存储不同数据类型的链表。

现在,查找函数与类型无关,因为它不进行实际的比较,因此,我们必须编写针对不同类型的比较函数,这是很容易实现的,因为调用者知道链表中所包含的值的类型,如果创建几个分别包含不同类型值的链表,为每种类型编写一个比较函数就允许单个查找函数作用于所有类型的链表。

下面是一个比较函数,用于在一个整型链表中查找:

注意强制类型转换,比较函数的参数必须被声明为void *以匹配查找函数的原型,然后强制转换为(int *)类型用于比较整型。
int int_compare(void const *a, void const *b)
{
if (*(int *)a == *(int *)b)
{
return 0;
}
else
{
return -1;
}
}

这个函数可以这样被使用:

desired_node = Search_List(root, int_compare, &desired_int_value);

如果你希望在一个字符串链表中进行查找,下面的代码就可以完成任务:

desired_node = Search_List(root, strcmp, “abcdefg”);

正好库函数strcmp所执行的比较和我们需要的一样,不过gcc会发出警告信息:因为strcmp的参数被声明为const char *而不是void const *。

上面的例子展示了回调函数的基本原理和用法,回调函数的应用是非常广泛的。通常,当我们想通过一个统一接口实现不同内容的时候,用回调函数来实现就非常合适。任何时候,如果你所编写的函数必须能够在不同的时刻执行不同的类型的工作或者执行只能由函数调用者定义的工作,你都可以用回调函数来实现。许多窗口系统就是使用回调函数连接多个动作,如拖拽鼠标和点击按钮来指定调用用户程序中的某个特定函数。
历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 【译】将HTML转为PDF的几种实现方案 变形金刚08动画怎么样 变形金刚08动画的问题 变形金刚08动画日语版剧情介绍 高分!换显卡nvidia控制面板被我卸了,重新安装显卡驱动后没了nvidia控... 我的nvidia控制面板被卸载了 怎么找回啊 卸载后 这个画面看着很奇怪_百 ... 李卓彬工作简历 林少明工作简历 广东工业职业技术学院怎么样 郑德涛任职简历 唐新桂个人简历 土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 “君不见巴丘古城如培塿”的出处是哪里 带“奈何”的诗句大全(229句) 里翁行()拼音版、注音及读音 带“不虑”的诗句 “鲁肃当年万人守”的出处是哪里 无尘防尘棚 进出口报关流程,越详细越好。谢谢大家指教。 双线桥不是看化合价升多少就标多少的吗?为什么CL2+2KI=2KCL+I2中I失... 回调函数是怎么实现的?为什么系统就会去调用回调函数 在拼多多上两个人怎么拼单啊 用呼吸作用的原理分析为什么刚采摘下来的苹果最好吃? 人体吸入氧气呼出二氧化碳,这是基于什么原理? 举例说明呼吸作用原理在日常生活中如何被应用 如何运用呼吸作用的原理使农作物保鲜 呼吸作用释放二氧化碳的原理是 光合作用和呼吸作用的原理是什么? 植物呼吸作用的原理 日常生活和农业生产中哪些方面应用了呼吸作用的原理 呼吸作用的原理和运用? 细胞呼吸的原理和应用 光呼吸和呼吸作用的区别 呼吸作用的意义是什么? 呼吸作用原理在生活中的应用 尽量详细一点 谢谢.. 细胞呼吸的原理 关于呼吸作用原理在生活中的应用10个以上 呼吸的原理是什么? 什么是呼吸作用 解释呼吸运动的原理、气体交换的原理 回调函数(callback)是什么? ,, 回调函数一般都什么作用求解 C++回调函数原理举个简单的小程序例子 c#-回调callback是什么原理,机制? C# php回调函数是什么样子的?靠什么原理运行? 回调函数 钩子函数 有什么区别 C++回调函数原理 举个简单的小程序例子 C++中回调函数的如何实现其逻辑? PHP中的回调函数是怎么实现的? 什么是"回调"在C和它们是如何实现的 PHP中的回调函数是怎么实现的? jquery中的回调函数怎么用 回调函数实现通知机制这个怎么理解 函数名作为参数传递与回调函数 回调函数的实现 请问使用回调函数,在接收数据的时候就可以不用判... 讲解如何实现C#回调函数 拼多多上面怎么拼单,毕竟喜欢同一件商品的人很少,QQ群上面拼多多互相砍价群,靠谱吗?请知道的说一说 如何为他人挂号? 怎样在我的手机上给别人挂号挂什么挂?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com