forEach回调的第三个参数的问题

let arr = []
arr.forEach((item, index, _arr)=>{
    
})

我们都知道forEach回调方法接受三个参数item, index, _arr,但是最近有人问第三个参数的用法,我一脸懵逼,有用过的吗?烦请举个例子,不胜感谢。。。

已解决 悬赏分:0 - 解决时间 2021-11-26 15:02
反对 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