如何用简单的英语解释回调?它们与从一个函数调用另一个函数有何不同?

2023-12-22

如何用简单的英语解释回调?它们与从另一个函数调用一个函数并从调用函数中获取一些上下文有何不同?如何向新手程序员解释它们的威力?


我会尽量让这个问题变得简单。 “回调”是由另一个函数调用的任何函数,该另一个函数将第一个函数作为参数。很多时候,“回调”是在以下情况下调用的函数:某物发生。那某物用程序员的话说,可以称为“事件”。

想象一下这样的场景:您将在几天内收到包裹。该包裹是送给您邻居的礼物。因此,一旦您收到包裹,您希望将其交给邻居。您出城了,因此您给您的配偶留下了指示。

您可以告诉他们去取包裹并将其带给邻居。如果你的配偶像电脑一样愚蠢,他们会坐在门口等待包裹到来(不做任何其他事情),然后一旦包裹到来,他们就会把它交给邻居。但还有更好的方法。告诉您的配偶,一旦他们收到包裹,就应该将其交给邻居。然后,他们可以正常生活,直到收到包裹。

在我们的示例中,收到包裹是“事件”,将包裹带给邻居是“回调”。您的配偶“执行”您的指示,仅将包裹送过来when包裹到达。好多了!

这种思维在日常生活中是显而易见的,但计算机却没有同样的常识。考虑程序员通常如何写入文件:

fileObject = open(file)
# now that we have WAITED for the file to open, we can write to it
fileObject.write("We are writing to the file.")
# now we can continue doing the other, totally unrelated things our program does

在这里,我们在写入之前等待文件打开。这“阻塞”了执行流程,并且我们的程序无法执行它可能需要执行的任何其他操作!如果我们可以这样做怎么办:

# we pass writeToFile (A CALLBACK FUNCTION!) to the open function
fileObject = open(file, writeToFile)
# execution continues flowing -- we don't wait for the file to be opened
# ONCE the file is opened we write to it, but while we wait WE CAN DO OTHER THINGS!

事实证明,我们使用一些语言和框架来做到这一点。它太酷了!查看Node.js http://nodejs.org/对这种思维进行一些真正的练习。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何用简单的英语解释回调?它们与从一个函数调用另一个函数有何不同? 的相关文章

  • 如何获取函数内的函数对象(Python)

    我想要有类似的东西 def x print get def name 但不一定知道名字x 理想情况下它会返回 x 其中 x 是函数的名称 您可以使用 Python 的内置检查库来完成此操作 如果您想处理更复杂的情况 您可以阅读更多其文档 但
  • 我可以向函数添加属性以防止重入吗?

    目前 我有一些如下所示的功能 private bool inFunction1 false public void function1 if inFunction1 return inFunction1 true do stuff whic
  • 是否可以替换 php 中的函数(例如邮件)并使其执行其他操作?

    我想用 PHP 重写一个函数 比如说 mail 函数 并且希望从现在开始调用 mail 时 它将加载我的 mail 版本而不是默认的 php 版本 这在 php 中可能吗 我想这样做的原因是因为我有数千行调用 mail 的代码 并且我不想重
  • Javascript:一般访问函数参数

    这是我所拥有的 var log function arg1 arg2 console log inside arg1 arg2 var wrap function fn return function args console log be
  • 在 R 中使用整数值代替数值(例如 1L 与 1)作为常量的好处

    在 R 源代码中 大多数 但不是全部 函数使用整数值作为常量 colnames lt function x do NULL TRUE prefix col if is data frame x do NULL return names x
  • JNI - 如何从 C++ 或 C 回调到 Java?

    我有调用本机 C C 代码的 Java 应用程序 C C 代码需要回调到 Java 中 你能给我一些如何做到这一点的例子吗 有许多有效的方法可以从 C C 回调到 Java 我将向您展示一种使用 C 的技术 易于调整 C 的环境 该技术使得
  • 为什么 C++ 对于 new 和 delete 有其单独的语法?

    为什么不能只是常规的函数调用 新本质上是 malloc sizeof Foo Foo Foo 虽然删除是 Foo Foo free 那么为什么 new delete 最终会拥有自己的语法而不是常规函数呢 这是一个尝试 The new操作员呼
  • Excel VBA 中.Delete 和.Clear 的区别?

    有什么区别Worksheets 1 Cells Delete and Worksheets 1 Cells Clear 我问这个是因为我一直用 Clear清除我的工作表内容 但在我之前的帖子中我发现Worksheets 1 Cells De
  • 函数名前的星号有什么作用?

    我对在大多数具有我不熟悉的函数声明的 C 程序中看到的内容感到困惑 void func name void param 什么是 暗示该功能 我的理解 在变量类型中的特点是它创建一个指向另一个变量的指针 因此它可以跟踪后一个变量存储在内存中的
  • javascript - setTimeout() 与 setInterval()

    之间的主要和次要区别是什么setTimeout and setInterval 我在网上搜索了一下 但它让我很困惑 它们之间有什么区别 主要区别是 setInterval fires again and again in intervals
  • 等待多个异步调用完成后再继续

    因此 我有一个加载页面 并通过 jquery get 发出多个请求以使用其值填充下拉列表 function LoadCategories Category LoadPositions Position LoadDepartments Dep
  • 强制一个 javascript 函数等待运行,直到第一个函数完成

    下午 我遇到了一个问题 我需要运行一个函数 然后在完成后 运行下一个函数 并对四个函数执行此操作 我已经尝试了一段时间 试图找到正确的布局语法我的函数调用但似乎找不到任何东西来解决这个特定的场景 html div div div jquer
  • 有哪些学习线程编程的好资源? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 随着多核CPU在桌面上的兴起 多线程技能将成为程序员的宝贵资产 您能为想要学习线程编程的程序员推荐一些好的资源 书籍 教程 网站等 吗 看
  • 为什么我的函数将布尔值更改为“on”?

    所以我是 php 编程世界的新手 我正在在线学习和其他形式等 但我找不到任何东西来帮助回答我的问题 这就是我在这里的原因 任何帮助当然不胜感激 谢谢 我想将下面的代码变成我可以调用的函数 它的工作原理如下所示 如果我选中表单中的复选框 它会
  • 是否有加权水库采样的算法? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 当数据流中的点具有相关权重时 是否有一种算法可以执行水库采样 Pavlos Efraimidis 和 Paul Spirakis 的算
  • 什么是异地退货?

    什么是非本地退货 什么场景下有用 请举个例子来解释一下 这是一篇好文章 http yehudakatz com 2010 02 07 the building blocks of ruby 关于在 ruby 块的上下文中使用非本地返回 Ru
  • LNK2019 错误,无法解析的外部符号

    错误逐字读取 1 gt yes obj error LNK2019 unresolved external symbol int cdecl availableMoves int const int const 4 int availabl
  • 有没有一个 PHP 函数可以交换两个变量的值?

    比如说我有 var1 ABC var2 123 在某些条件下我想像这样交换两者 var1 123 var2 ABC 是否有一个 PHP 函数可以执行此操作 而不必创建第三个变量来保存其中一个值 然后重新定义每个值 就像这样 var3 var
  • 语义差异实用程序[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试找到一些语义差异 合并实用程序的好例子 比较源代码文件的传统范例是通过比较行和字符来工作的
  • 人们今天使用的可扩展语言是什么?

    维基百科说 可扩展编程是计算机科学中使用的一个术语 描述一种计算机编程风格 重点关注扩展编程语言 编译器和运行时环境的机制 例如 Tcl 允许您编写自己的控制结构 看here http wiki tcl tk 685 我有兴趣编制在实际代码

随机推荐

  • ASP.NET MVC 中的面向方面编程

    我目前正在 ASP NET 中开发 MVC 应用程序 我正在尝试分离关注点 以便最终得到更干净 更易于维护的代码 因此 作为一个起点 我正在考虑日志记录方面 我的想法是 最初 记录每个控制器中每个方法的调用和返回 我会将这个逻辑放在一个单独
  • 改造 POST 请求 response.isSuccessful() 返回 false

    我正在努力使POST使用 Retrofit2 请求 但我现在的处境是response isSuccessful 返回 false 我不知道如何调试它 我检查了后端的日志 没有错误 什么也没有 我确保请求的 URL 正确 所有参数也正确 我做
  • 使用 gradle 构建 android,替换每个产品风味的字符串

    在我将 Android 项目构建为两个不同的付费和免费应用程序之前 我更改了每个值和字符串 所以昨天我犯了一个大错误 所以 我正在学习如何使用 gradle 来构建我的应用程序 我的应用程序有一些差异 应用程序名称 只需添加后缀 Free
  • 将 NaN 替换为 pandas 数据框中的空列表

    我正在尝试用空列表 替换数据中的一些 NaN 值 但是该列表表示为 str 并且不允许我正确应用 len 函数 无论如何 有没有办法用 pandas 中的实际空列表替换 NaN 值 In 28 d pd DataFrame x 1 2 3
  • 如何创建包含所有点的箱线图,其中对于每个组,可以手动分配点的颜色

    我有一个数据框 gt dput df2 structure list Genotype c miR 15 16 FL miR 15 16 FL miR 15 16 FL miR 15 16 FL miR 15 16 FL miR 15 16
  • 使用 ruby​​ gsub 和 regexp 进行更智能的字符替换

    我正在尝试为某些文章标题创建类似于永久链接的行为 但我不想为永久链接添加新的数据库字段 所以我决定编写一个助手 将我的文章标题从 O focoas a pornit cruciada mpotriva b rba ilor zg rci i
  • Composer 自动加载 - 找不到类

    我正在运行一个 Silex 小应用程序 试图让某种结构继续下去 这是我的composer json require silex silex 1 3 autoload psr 0 HelloWorld Controller src Hello
  • 进行布尔或可见性的最佳方法

    我有一个控件 仅当一系列属性中至少有一个返回 true 时 我才希望该控件可见 我正要实现我自己的 BooleanOrToVisibilityMultiConverter 但感觉必须有一个更好的 并且完全明显的 方法来做到这一点 请赐教 M
  • 如何声明 C# Web 用户控件但阻止其初始化?

    我有一个 C ASP NET aspx 页面 它声明了两个控件 每个控件代表一个选项卡的内容 我需要一个查询字符串参数 例如 tab 1 来确定激活两个控件中的哪一个 我的问题是 它们都经历初始化事件并填充其子控件 浪费 CPU 资源并减慢
  • 从外部禁用 Linux 程序的信号

    在 Linux 上 是否可以以某种方式禁用程序的信号发送外在地 也就是说 不修改他们的源代码 Context 我正在呼叫 C 还有一个Java 在 Linux 上的 bash 脚本中编写程序 我不希望我的 bash 脚本以及该脚本启动的其他
  • Angular 2 选择组件设置初始选择

    我正在尝试使用 ngModel 在 Angular 2 中创建一个选择组件包装器 一旦选择更改 所有事件都会正确触发 但我无法在渲染时设置初始选择 这是我的组件 Component selector my dropdown inputs s
  • 如何优化 SQLAlchemy 生成的这个查询?

    我有一个由 SQLAlchemy ORM 生成的查询 它应该检索特定课程的stream items 及其所有部分 资源 内容文本块等 以及发布它们的用户 然而 这个查询似乎非常慢 在我们的生产数据库上花费了几分钟的时间 数据库中有大约 20
  • HBase 单行事务支持中的行锁定

    在 HBase 中 为了提供单行事务支持 它使用行锁定概念 假设 例如 Put p new Put Row Key 该语句将锁定该行 所以 直到我们完成 表 put p 锁不会被释放 所以 在这之间 如果我开始一个新的看跌期权 即 Put
  • Google Colaboratory ImportError:libcublas.so.10.0:无法打开共享对象文件:运行时没有这样的文件或目录

    我正在关注这篇关于 Google Colaboratory 的人工智能农业的文章 https medium com deepquestai ai in agriculture detecting defects in apples b246
  • 如何在 Swift 3 中将文档目录中的图像显示到 UIImageView?

    下面的 Swift 2 示例给出了此错误 String 类型的值没有成员 stringByAppendingPathComponent 对于 Swift 3 我需要更改什么 Apple 正试图让所有人摆脱路径字符串范式 转向 URL 即fi
  • Response.Write() 是否可以与 Razor 一起使用?

    Response Write 是否可以与 Razor 一起使用 我尝试使用 Html RenderAction但我收到错误 CS1502 The best overloaded method match for Microsoft WebP
  • 如何在 WPF 中获取 ListView 的选中行值

    我有一个ListView在 WPF 应用程序中CheckBox 我想将所有选中行的值保存在 WPF 列表中 我怎样才能实现这个目标 我的列表视图
  • 使用自动布局“捏合缩放”

    我遵循了许多在网上找到的 捏合缩放 教程 并阅读了有关自动布局的内容 但我无法让它在我的项目中工作 我的整个项目都使用自动布局 所以我不想将其关闭 我正在将一个巨大的 UIImage 例如 长边 5000px 加载到 UIImageView
  • 在 swagger 中处理多个基本路径

    我正在使用 swagger ui 为我们的客户提供 REST API 的良好文档 在内部 我们有两个不同的 jenkin 构建项目的环境 例如 swagger json 可以在两种环境中访问 http www myhost com xyz
  • 如何用简单的英语解释回调?它们与从一个函数调用另一个函数有何不同?

    如何用简单的英语解释回调 它们与从另一个函数调用一个函数并从调用函数中获取一些上下文有何不同 如何向新手程序员解释它们的威力 我会尽量让这个问题变得简单 回调 是由另一个函数调用的任何函数 该另一个函数将第一个函数作为参数 很多时候 回调