说明

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. [转帖]TiFlash DeltaTree 存储引擎设计及实现分析 - Part 1

    https://tidb.net/book/book-rush/features/tiflash-code/tiflash-deltatree TiFlash 是 TiDB 的分析引擎,是 TiDB ...

  2. [转帖]minio 的 warp

    3 benchmarking tool. Download Download Binary Releases for various platforms. Configuration Warp can ...

  3. [转帖]py_innodb_page_info.py工具使用

    目录 一.Linux安装Python3 1. 解压包 2. 安装环境 3. 生成编译脚本 4. 检查python3.10的编译器 5. 建立Python3和pip3的软链 6. 添加到PATH 7.  ...

  4. [转帖]wmic命令介绍

    https://www.jianshu.com/p/3e1a5a8fa23b How to Get Your System Serial Number PS C:\windows\system32&g ...

  5. 关于JVM指针压缩性能的研究

    关于JVM指针压缩性能的研究 摘要 JVM的内存对消最小是 8bytes 所以32G内存的情况下可以使用 32位的指针就可以了. 32位就是4G 在乘以最小的内存extent 8 bytes 的出来可 ...

  6. [转帖]linux性能优化-CPU利用率

    参数说明 /proc/stat提供系统的CPU和任务统计信息. user(us): 用户态CPU时间,不包括下面的nice时间,但包括了guest时间. nice(ni): 代表低优先级用户态CPU时 ...

  7. [转帖]Ceph优化系列(四):RocksDB 使用 ARM 64 位 CRC32C 硬件优化指令

    一.前言 CRC32(A cyclic redundancy check 32)应用于校验,为了保证数据的正确性,采用的一种检错手段. CRC32C (CRC32 Castagnoli)  与 CRC ...

  8. kettle(docker版)系列文章02---hello world

    目标:将mysql库中表的数据定时转到另外一个表中 1.在mysql中新建目标表test_kettle,有字段id,productName,createtime 2.连接mysql数据库 DB连接-- ...

  9. windwos10-11打开任意文件弹出警告

    如下打开exe或者视频.图片都弹出警告 解决方案输入快捷键win+s换出搜索框 输入Internet 选项 进入安全选项点击自定义级别 找到,加载应用程序和不安全文件 勾选启用(不安全) 然后确定-在 ...

  10. C/C++ 发送与接收HTTP/S请求

    HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的协议.它是一种无状态的.应用层的协议,用于在计算机之间传输超文本文档,通常在 Web 浏览器和 Web 服务器之 ...