javascript - JS : Higher Order Function Problem; Accept Array and Callback Function --> don't understand

标签 javascript arrays function callback

我遇到以下问题:

我的每一个

编写一个函数 myForEach,它接受一个数组和一个回调函数。 myForEach 的行为应尽可能反射(reflect) native .forEach() 数组方法的功能。

下面是代码:

let sum = 0;

function addToSum(num) {
    sum += num;
}

let nums = [10, 20, 30];


function myForEach(anArray, callback){


  for (let i=0; i<anArray.length; i++){
    let num = anArray[i]; 
    //console.log(num)

    // I don't understand what this line of code is doing...
    callback(num, i, anArray); 
  }
  return undefined
}



myForEach(nums, addToSum);

console.log(sum); // 6

上面的代码可以解决这个高阶函数问题,但我不明白为什么。具体来说,下面这行代码的意思是什么:

 callback(num, i, anArray); 

为什么有3个参数?这些论点被传递到哪里?

最佳答案

“尽可能接近”是一个相当苛刻的要求。 Javascript内置函数非常复杂!这些是该标准要求您实现的步骤:

http://www.ecma-international.org/ecma-262/7.0/#sec-array.prototype.foreach

通俗地说,由于 JS 是一种高度动态的语言,所以当你设计一个内置函数时,你不能仅仅依赖于参数是你所期望的。对于 forEach:

  • 参数不能是数组,甚至不能是对象
  • 它可能没有长度或者它的长度可能不是数字
  • 回调可能丢失或者不是函数

等等。这就是为什么“尽可能接近”的实现应该在实际开始循环和调用之前进行大量安全检查。

您可以在 MDN 页面上找到一个真实的 forEach 填充示例(仅在您决定放弃时查看):

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

关于javascript - JS : Higher Order Function Problem; Accept Array and Callback Function --> don't understand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55435529/

相关文章:

javascript - 为什么我的 SVG 中的 .selectAll() D3 创建的圆圈使用 .length 被称为 1 个元素?

javascript - 使用 If Else 语句和 document.getElementByID 进行表单验证

c - C 中使用指针对数组进行排序时遇到的问题

arrays - 考虑所有连续子数组的数组每个元素的频率

c++ - 控制到达非空函数的结尾 [-Wreturn-type]

javascript - 使用 $compile 以编程方式添加指令并从范围传递数据,

javascript - .finally 在 ES6 规范中吗?

python - 迭代 NumPy 数组中的行,如何正确处理这种 1D 与 2D 情况,我希望将 1D 视为整行进行索引?

javascript - 如何从另一个 HTML 页面调用函数?

java - 从一组唯一数字到另一组唯一数字的单向函数