说明

let thisArray = []
thisArray.forEach((item, index, array)=>{
//为什么要有array,而不是直接用thisArray?
})

参数
callback 为数组中每个元素执行的函数,该函数接收一至三个参数:
currentValue 数组中正在处理的当前元素。
index [可选] 数组中正在处理的当前元素的索引。
array [可选] forEach() 方法正在操作的数组。
thisArg 可选 可选参数。当执行回调函数 callback 时,用作 this 的值。

如上,forEach回调方法接受三个参数item, index, _arr,但是最近有人问第三个参数的用法,这第三个参数有用过的吗?

原因

更快地查询到数组的引用

如果在回调中需要访问数组,而你又没有接受第三个参数,那么引擎需要向上层作用域查询是否存在变量,而如果你接受了第三个参数,那么相当于在当前作用域中就已经有这个变量了而不需要向上查询。
这或许能算是一个好处吧,虽然可能微不足道。

函数式编程扩展-在不知道当前遍历操作的数组的情况下

比如在封装回调函数的情况下:

function replace(item, key, arr){
if(item === 'b') {
arr[0] = 'a1'
}
}
const arr1 = ['a', 'b', 'c']
arr1.forEach(replace)
const arr2 = ['1', '2', '3']
arr2.forEach(replace)

函数式编程就是可以让你做到逻辑完全分离,也就是说 callback 函数也可以完全分离。
想象一下你有可能把 callback 封装在 A 文件里,而 .forEach() 和 .map() 操作在 B 文件里面,这时候他的意义就体现出来了。

来源

  1. forEach回调的第三个参数的问题
  2. 有一个疑问,在 JS 中 Array.forEach()与 Array.map()这些方法的第三个可选参数 array 的作用

Array.forEach() 与 Array.map()这些方法的第三个可选参数 array 的作用的更多相关文章

  1. js数组中的find(), findIndex(), filter(), forEach(), some(), every(), map(), reduce()方法的详解和应用实例

    1. find()与findIndex() find()方法,用于找出第一个符合条件的数组成员.它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该 ...

  2. c# 方法参数(传值,传引用,ref,out,params,可选参数,命名参数)

       一.方法参数的类型----值类型和引用类型 当方法传递的参数是值类型时,变量的栈数据会完整地复制到目标参数中即实参和形参中的数据相同但存放在内存的不同位置.所以,在目标方法中对形参所做的更改不会 ...

  3. 【js实例】Array类型的9个数组方法,Date类型的41个日期方法,Function类型

    前文提要:[js实例]js中的5种基本数据类型和9种操作符 Array类型的9个数组方法 Array中有9个数组方法: 1.检测数组 2.转换方法 3.栈方法 4.队列方法 5.冲排序方法6.操作方法 ...

  4. ECMAScript 5中对Array中新增了9个方法

    ECMAScript 5中对Array中新增了9个方法: 5个迭代方法(循环操作数组中的各个项):forEach(),map(),filter(),every()和some() 2个归并方法(迭代数组 ...

  5. Array、Set、Map、Object学习总结

    Array和Set对比 都是一个存储多值的容器,两者可以互相转换,但是在使用场景上有区别.如下: Array的indexOf方法比Set的has方法效率低下 Set不含有重复值(可以利用这个特性实现对 ...

  6. 为什么 array.foreach 不支持 async/await

    一.背景 react 项目中,渲染组件时,显示的数据一直有问题,本来以为是 react 组件的问题,后来才发现罪魁祸首在 fetch 数据的过程,因为我用了 async/await ,而却搭配了 fo ...

  7. Go语言学习笔记(四) [array、slice、map]

    日期:2014年7月22日   一.array[数组]   1.定义:array 由 [n]<type> 定义,n 标示 array 的长度,而 <type> 标示希望存储的内 ...

  8. Golang高效实践之array、slice、map

    前言 Golang的slice类型为连续同类型数据提供了一个方便并且高效的实现方式.slice的实现是基于array,slice和map一样是类似于指针语义,传递slice和map并不涉及底层数据结构 ...

  9. Go语言—— Array,Slice,Map 和 Set

    转自:https://se77en.cc/ Array(数组) 内部机制 在 Go 语言中数组是固定长度的数据类型,它包含相同类型的连续的元素,这些元素可以是内建类型,像数字和字符串,也可以是结构类型 ...

  10. [Array]1. Two Sum(map和unorder_map)

    Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...

随机推荐

  1. 【转帖】ethool工具之TSO、UFO、GSO、LRO、GRO和RSS介绍

    ethtool -k < 网络接口>, ethtool --show-offload < 网络接口>, 或者可以看到很多网络接口的offload特性,例如: $ sudo et ...

  2. [转帖]Python模块winRM

    https://www.jianshu.com/p/ac095497bad4 一.介绍 winRM服务是windows server下PowerShell的远程管理服务.Python脚本通过连接win ...

  3. [转帖]Redis 最大客户端连接数,你了解吗?

    文章系转载,方便整理和归纳,源文地址:https://cloud.tencent.com/developer/article/1803944 1. 前言 上一篇文章<你的Redis集群撑得住吗? ...

  4. [转帖]linux性能检测之sar详解

    http://blog.51niux.com/?id=99 sar也是sysstat中的一员. 一.介绍 1.1 简介 sar是一个优秀的一般性能监视工具,它可以输出Linux所完成的几乎所有工作的数 ...

  5. CentOS7 上面升级git 2.24的方法

    本来想使用tar包进行安装 但是发现tar包安装时总是报错如下: [root@centos76 git-2.25.0]# make LINK git-imap-send imap-send.o: In ...

  6. Windows 环境下简单的自动备份以及清理数据库的操作过程

    今天能想到要简单的备份一下windows上面的数据库. 然后并且能够定期清理文件. 然后从网上找了一下 找到把饭如下 1. 备份 创建一个目录用来存放数据库备份 c:\dbbak 然后编写一个脚本, ...

  7. 一次OOM事故的学习过程

    事故过程 周二下午得到消息, 希望帮忙分析dump文件. 告知dump大小为42G大小. 一般机器没这么大的内存进行处理. 建议现场上传到百度云盘, 然后我这边进行下载. 时间进度为: 11.57创建 ...

  8. Grafana监控java应用以及vCenter的方法

    Grafana监控java应用以及vCenter的方法 背景 最开始弄过vCenter的监控. 但是发现很多地方已经不合适了. 今天看了下jmx监控 java的应用. 顺便监控了下vCenter. 这 ...

  9. MacType更好的字体渲染

    初步尝试 下载 noMeiryoUI 和 苹果简方字体,通过noMeiryoUI替换系统字体 建议使用苹果简方 常规体 10px,字体下载地址 mactype 我的系统:win10 lts 1809, ...

  10. TienChin-课程管理-课程搜索

    后端 新建 CourseVO.java: /** * CourseVO类是一个课程的值对象,用于存储课程的相关信息. * 它包含了课程的名称.类型.适用对象.最低价格和最高价格等属性. */ publ ...