let arr = [] arr.forEach((item, index, _arr)=>{ })
我们都知道forEach回调方法接受三个参数item, index, _arr,但是最近有人问第三个参数的用法,我一脸懵逼,有用过的吗?烦请举个例子,不胜感谢。。。
已解决
悬赏分:0
- 解决时间 2021-11-26 15:02
点赞 0反对 0举报 0
收藏 0
分享 0
回答4
最佳
-
其实想问题可以一步一步想
首先既然有了肯定有需求
为什么要用到这个参数或者在什么情况下会用到?
在不知道当前遍历操作的数组的情况下
什么情况下会不知道当前遍历的是什么数组?
封装的情况下
随便举例用到原数组的情况:const arr = ['a', 'b', 'c'] arr.forEach((item, key) => { if(item === 'b') { arr[0] = 'a1' } })
封装的情况:
function replace(item, key, arr){ if(item === 'b') { arr[0] = 'a1' } } const arr = ['a', 'b', 'c'] arr.forEach(replace)
支持 0 反对 0 举报2021-11-26 07:33
-
如果想不起来我会去菜鸟看一下,或者MDN。不止是forEach,几乎所有和遍历有关的数组方法,都是这么个参数结构(item, index, _arr) //当前元素,索引,源数组 ,reduce()方法又特别一些。
支持 0 反对 0 举报2021-11-26 07:56
-
参数
描述
function(currentValue, index, arr)
必需。 数组中每个元素需要调用的函数。
函数参数:参数
描述
currentValue
必需。当前元素
index
可选。当前元素的索引值。
arr
可选。当前元素所属的数组对象。
thisValue
可选。传递给函数的值一般用 "this" 值。
如果这个参数为空, "undefined" 会传递给 "this" 值支持 0 反对 0 举报2021-11-26 09:10
-
用处的话我倒是能想到一个,就是更快的查询到数组的引用。
如果你在回调中需要访问数组,而你又没有接受第三个参数,那么引擎需要向上层作用域查询是否存在变量,而如果你接受了第三个参数,那么相当于在当前作用域中就已经有这个变量了而不需要向上查询。这或许能算是一个好处吧,虽然可能微不足道。
还有的话可能跟程序的设计有关,比如你可能把回调定义在别的地方,但是回调中又希望访问数组,那么这时候以参数形式传递是最好的选择,不然数组就要定义在回调函数和forEach都能访问的作用域中比较局限。支持 0 反对 0 举报2021-11-26 10:22