为什么在Javascript的array.forEach回调中提供数组参数?

时间:2016-09-16 09:54:24

标签: javascript arrays closures

Javascript的数组迭代函数(forEacheverysome等)允许您传递三个参数:当前项,当前索引和正在操作的数组。< / p>

我的问题是:作为一个参数操作数组有什么好处,而不是通过闭包来访问它?

我为什么要用这个:

myArray.forEach(function(item, i, arr) {doSomething(arr);});

而不是:

myArray.forEach(function(item, i) {doSomething(myArray);});

2 个答案:

答案 0 :(得分:5)

您可能希望将通用函数作为参数传递给forEach而不是匿名函数。想象一下你有一个像这样定义的函数的情况:

function my_function(item, i, arr) {
    // do some stuff here
}

然后在不同的数组上使用它:

arr1.forEach(my_function);
arr2.forEach(my_function);

第三个参数允许函数知道正在操作哪个数组。

另一种可能有用的情况是,当数组尚未存储在变量中,因此没有要引用的名称时,例如:

[1, 2, 3].forEach(function(item, i, arr) {});

答案 1 :(得分:-1)

在现实生活中有很多情况是知道错误发生在哪里以及数组的内容是什么。并专注于后端 JS 上下文,如 NodeJS 应用程序..

假设您的网站受到攻击,您想知道盗版者如何进入您的网站,在这种情况下,提供包含整个元素的数组很有用。看ECMASCRIPT 2020第642-643页是写的

callbackfn is called with three arguments: 
the value of the element,
the index of the element,
and the object being traversed

插图: callbackfn is called with three arguments: the value of the element, the index of the element, and
the object being traversed Ecmascript 2020 manual

好的试试这个例子

let myArray = [2 , 3, 5 , 7 , "ഊമ്പി", 13]
let foo = null
myArray.forEach(function(value, index, currentObject) {
    try {
        foo = 3.14*value;
        if (Number.isNaN(foo)) throw "foo is NaN" 
    } 
    catch (error) {
        console.error(error + ", and value: " + value + ", index: " + index + ", currentObject: " + currentObject);
    }
});

希望答案对新手有帮助 都是这样的!