javascript回调函数,变量映射

2023-12-01

我一直在javascript中使用回调函数,但我从来不明白回调如何知道它可以接受哪些变量。

让我们看下面的示例代码;

var friends = ["Mike", "Stacy", "Andy", "Rick"];

friends.forEach(function (name, index){
    console.log(index + 1 + ". " + name); 
});

这逻辑上输出;

1. Mike 
2. Stacy
3. Andy
4. Rick

事实上,以下所有内容都会输出相同的内容;

friends.forEach(function (index, name){
    console.log(name + 1 + ". " + index); 
});

friends.forEach(function (foo, bar){
    console.log(bar + 1 + ". " + foo); 
});

friends.forEach(function (x, y){
    console.log(y + 1 + ". " + x); 
});

里面的回调函数是如何实现的forEach知道如何解释name and index?换句话说;回调如何知道数组有值和索引?很明显,您为回调函数的输入变量指定的名称并不重要,但顺序很重要,那么如何映射呢?

从这里开始,我还想将这些知识应用到其他一般对象,而不仅仅是列表。那么变量是如何从对象映射到回调函数的呢?这是对象中预先定义的东西吗?


在支持的浏览器中Array.prototype.forEach本身它的实现方式可能有所不同,但通常您会使用Function.prototype.call执行callback函数在迭代集合时以正确的顺序(无论是什么)提供参数。

The MDN条目 for forEach有以下代码用于在不支持它的浏览器中实现数组:

if (!Array.prototype.forEach) {
    Array.prototype.forEach = function (fn, scope) {
        'use strict';
        var i, len;
        for (i = 0, len = this.length; i < len; ++i) {
            if (i in this) {
                fn.call(scope, this[i], i, this);
            }
        }
    };
}

换句话说;回调如何知道数组有值和索引?很明显,您为回调函数的输入变量指定的名称并不重要,但顺序很重要,那么如何映射呢?

详细来说,回调函数只是一个像其他函数一样的函数,其参数可以任意命名(a and b效果一样好index and value);在执行之前它不知道有关数组的任何信息。您调用的数组forEachon 知道它有索引,并且这些索引有值,并且它还期望回调函数以特定顺序接受参数。数组和回调函数之间的映射并不完全一致,forEach函数只是依次将每个索引及其对应的值传递给回调函数。

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

javascript回调函数,变量映射 的相关文章

  • javascript:在 IE9 中获取输入字段(类型=文件)的 base64

    我需要上传一张图片 类似这样的
  • WebGL iOS 渲染为浮点纹理

    我正在尝试在 iOS Safari 上的 WebGL 中渲染浮点纹理 而不是在本机应用程序中 我已经设法让 iOS 读取手动 例如从 JavaScript 创建的浮点纹理 但是当我创建浮点类型的帧缓冲区并使用 GPU 渲染到其中时 它不起作
  • 我无法注入带有“!important”规则的样式[重复]

    这个问题在这里已经有答案了 我尝试使用以下代码注入样式 document body style color green important Per CSS 级联引用 http www w3 org TR CSS2 cascade html
  • moment.calendar() 没有时间

    我想使用不带时间的 moment calendar 选项 所以而不是 上周二下午 5 点 我想要 上周二 有人知道 Moment 现在是否有解决方案吗 我找到了这个小提琴http jsfiddle net nawxZ http jsfidd
  • jqgrid 在编辑框中选择不正确的下拉选项值

    我正在使用表单编辑 表单中有两个选择框 一个选择框是国家 地区 另一个选择框是州 州选择框取决于所选的国家 地区 并将动态填充 例如 Country 美国 期权价值 1 英国 期权价值 2 美国的状态 阿拉巴马州 选项值 1 加利福尼亚州
  • 解释 javascript 中的奇怪行为

    我在推特上看到了这个 我也无法解释 定义一个onload函数按以下两种方式工作 1 JSFiddle http jsfiddle net 6rq9k 2 JSFiddle http jsfiddle net 6rq9k 1
  • 通过搜索查找下一个文本并突出显示不起作用

    当在搜索框中搜索任何文本时 它可以找到并突出显示正确的文本 但是当搜索下一个 新文本时 它无法找到下一个 新文本 再次搜索时它不起作用 我无法找到问题 这JS below JS button search click function va
  • 使用什么事件来在选择文本框中的值时显示警报消息

    我正在使用 jquery 的自动完成 api 来从数据库中获取名称 但是我想在从显示的文本框中选择名称时显示一条警报消息 我将显示一个图像以便更好地理解 当我输入 S 时 它将显示所有包含 S 的记录 所以问题是 如果我选择例如 Spars
  • Backbone.js 与 Google 地图 - 有关此问题和侦听器的问题

    我有一个为 Google Maps v3 创建的模块 我正在尝试将其转换为 Backbone js 视图构造函数 到目前为止 这是我的视图模块 我将解释代码后遇到的问题 pg views CreateMap Backbone View ex
  • 如何使用 jQuery UI Sortable 正确相交?

    这是我对 jQuery UI Sortable 进行动画处理的尝试 https codepen io anon pen YdMOXE https codepen io anon pen YdMOXE var startIndex chang
  • 测量填写部分的时间 - 谷歌表单

    我正在尝试使用谷歌表单进行研究调查问卷 对于某些部分 我想自动测量用户填写所需的时间 谷歌表单中没有这样的选项 我尝试复制表单源 并用 javascript 填充时间 但它不起作用 跨源问题 未能成功托管复制的表单 如何做到 我如何衡量回答
  • 将数字限制为段的最优雅的方法是什么?

    比方说x a and b是数字 我需要限制x到段的边界 a b 换句话说 我需要一个钳位功能 https math stackexchange com q 1336636 clamp x max a min x b 有人能想出一个更易读的版
  • apollo 客户端从存储中删除而不发生突变

    我需要通过 id 从本地存储中删除一条 记录 而不使用突变 因为服务器不支持突变 我尝试像这样手动访问商店 delete this apolloClient store getState apollo data 1112 这会删除记录 但是
  • 我将 X Y Z 坐标转换为屏幕 X Y 坐标有什么问题吗?

    我正在制作 3D 空间中弹跳的球体的 HTML5 Canvas 演示 这非常简单 每个球都有 X Y 和 Z 坐标 然后 这些坐标将转换为我在此处阅读的屏幕 X 和 Y 坐标 http answers google com answers
  • Skrollr 添加空白

    我已经尝试了一切 我在谷歌上阅读了 4 5 页试图找到适合我的修复程序 已经筋疲力尽了 即使我使用 skrollr 示例 我的问题仍然存在 不是说他们做错了什么 我知道我只是没有正确理解它 因此 我上传了一个演示 仅在移动设备上展示这个尴尬
  • 使用 Javascript 检测 Pepper (PPAPI) Flash

    我们使用的是专有的文档查看器 它与某些 Chrome 版本中的 Pepper 版本的 Flash 配合得不太好 所以我希望能够检测到它并重定向到不同格式的相同内容 由于这个版本似乎落后于 NPAPI 版本 所以我一直在使用闪光检测 http
  • 如何在 WebView 中添加 JavaScript 函数并稍后在提交 reCAPTCHA 时从 HTML 调用它

    我在 WebView 中添加一个 JavaScript 函数 如下所示 Kotlin val webView findViewById R id webview as WebView webView getSettings setJavaS
  • 如何用时刻找到与给定时间最接近的时间?

    所以我有一个简单的代码 一个工作代码 它使用 moment 获取最接近给定时间的时间 Current time in millis const now moment 10 16 HH mm format x List of times co
  • 如何在 ionic2 中 pop() 之后重新加载 ion-page

    我有2页Page1 and Page2 我用过this nav pop 在Page2中 它将弹出Page2 Page1将启用 但我想刷新Page1 先感谢您 您可以将父页面与导航推送一起传递 这样您就可以将父页面作为 navParamter
  • 允许 iframe 跨域链接到目标父框架

    我有 2 个域 域 1 上的一个页面使用 iframe 加载域 2 中的内容 如何允许来自domain2 iframe 内 的链接在domain1 的完整父框架中打开 我一直在关注IE和w3c的新沙箱属性 http www w3 org T

随机推荐

  • 双精度的精确二进制表示[重复]

    这个问题在这里已经有答案了 可能的重复 C 中的浮点数转换为二进制 我有一个非常小的双变量 当我打印它时 我得到 0 使用 C 现在为了获得更好的精度我尝试使用 cout precision 18 i think 18 is the max
  • WebView 中的 Android +1 按钮

    我尝试使用他们描述的方法将 Google 的 1 按钮放入 WebView 中 我已经初始化了 WebView 如下所示 final WebView web WebView findViewById R id webView web get
  • 可定制/动态 SWF 生成

    想知道是否有人知道如何制作可定制的 Flash swf 文件 其中似乎有一个 swf 模板 用户可以输入一些更改 例如文本或图像 并接收包含更改的新编译的 swf 文件 一些例子 http flashfreezer com landingc
  • Bootstrap 4.0 网格系统布局不起作用

    我正在尝试使用引导程序进行布局 但我无法弄清楚我做错了什么 我放入两列 6 列 第二列 6 列 我放入两列 3 列 但它不起作用 我是引导新手 这是代码
  • DataGridView:更改数据源后保留选择吗?

    有没有办法在更改数据源后保持 DataGridView 的选定单元格处于选中状态 您可以根据特定于您的需求的条件来匹配应选择的内容 只需根据您的匹配将单元格或行的 Select 属性设置为 true false 即可 这是一个简单的示例 您
  • DNS 记录将 www 重定向到非 www

    我在用着名称廉价域和Vultr主持 我正在尝试将 DNS www 重定向到非 www www example com 到 example com 我联系了 Vultr 并询问如何使用他们的 DNS 管理器执行此操作 他们说他们不会提供帮助
  • 在python中将列表列表转换为数据框

    list 1 1 56 20 2 78 30 3 34 40 4 98 这是我的列表列表 我想制作一个像这样的数据框 a b c 1 1 56 20 2 78 30 3 34 40 4 98 我做了一个代码 df pd DataFrame
  • 使用 Crashlytics 将应用程序部署到 Apple Appstore - 我需要隐私政策吗?

    我即将向 Apple AppStore 提交一个使用 Swift 构建的应用程序 该应用程序使用 Crashlytics 来捕获崩溃信息 正如 Crashlytics 用户所知 有关使用情况 持续时间 崩溃等的一些信息会被捕获并存储在 Cr
  • Flex 忽略 services-config.xml 中的更改

    昨天我花了半天时间尝试强制 Flex Remoting 使用 HTTPS 但没有成功 今天我尝试连接到其他域 我更改了端点的 url 但看起来 Flex 只是忽略了我的更改 我确信 src 目录中的任何文件中都不存在旧网址 我什至将 ser
  • 如何使用Python请求登录网站,存储cookie,然后访问网站上的另一个页面?

    我正在尝试使用 Python 脚本登录网站 存储我收到的 cookie 然后使用相同的 cookie 访问网站的会员专用部分 我已经阅读了有关该主题的几篇文章和答案 但没有一个答案对我有用 以下是我尝试访问的网站登录页面的 HTML 代码
  • 子/函数数组参数已更改

    我有一个带有字符串数组作为参数的 Sub Private Sub des ByVal array As String Dim i As Integer For i 0 To UBound array array i hy Next End
  • manim 中的孟加拉语单词打印完全错误

    我一直在尝试使用 Manim 为孟加拉语角色制作动画 我用了这个方法在 Manim 中使用电脑字体 一切似乎都运行良好 直到我看到输出 例如 如果我写 我得到的输出为 仔细查看输出 大多数时候它会吐出毫无意义的词语 使用的代码是 class
  • PHP PDO:SQLSTATE[HY000] [2002] 连接被拒绝

    我遇到了 PHP 数据对象的问题 我无法连接到我的数据库 首先这是我的 PHP 脚本
  • 当父级有修饰符时,SCSS + BEM 风格的子级结构

    请问可以为 rounded 内的元素设置 css 吗 我不想使用 box 某些东西 但我需要修改依赖于父修饰符的子项 div class box div class box something Hello div div div class
  • 使用AWS iOS SDK从cloudfront分发中获取文件

    我正在使用适用于 AWS 的最新 iOS SDK 并且使用 TransferManager 类从 S3 获取文件可以正常工作 S3GetObjectRequest request S3GetObjectRequest alloc initW
  • 在 Socket.IO 1.0 中配置超时和传输

    在旧版本的 Socket IO io set transports xhr polling io set close timeout 3 但现在 命令io set已被弃用 我如何定义close timeout and transports
  • Bing 地图 GetRoute 给出“0x8004231C”错误

    我试图在 bing 地图上显示从点到点的路线 在真实设备上测试 我已经输入了 2 个航路点 地理坐标 并且我正在尝试使用以下命令通过 Windows PhoneToolKit 获取路线await query GetRouteAsync 不幸
  • 强制乘法使用 __rmul__() 而不是 Numpy 数组 __mul__() 或绕过广播

    这个问题与中提出的问题很接近用你班级的 mul 覆盖其他 rmul 但我的印象是 这是一个比数值数据更普遍的问题 这也没有得到解答 我真的不想使用矩阵乘法 对于此操作 因此 问题 我确实有一个接受标量和数值数组相乘的对象 像往常一样 左乘法
  • Android 自定义日历和提醒[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我的应用程序将包含一个自定义日历 并且根据此日历用户可以创建事件和提醒 问题是 是否可以在 android 中创建自定义日历 我的意思是我想在我的日历中创建事件 这些事件不会出现
  • javascript回调函数,变量映射

    我一直在javascript中使用回调函数 但我从来不明白回调如何知道它可以接受哪些变量 让我们看下面的示例代码 var friends Mike Stacy Andy Rick friends forEach function name