javascript - 无法理解 JS 中的回调函数

标签 javascript function callback

所以我目前正在刷新我的 JS 知识,关于回调函数的一些内容让我感到困惑。

这基本上是一个“语法”问题,我注意到在练习示例中我看到回调总是使用代码中从未指定的参数,并且程序仍然使其工作。

示例:

const numbers = [1, 2, 3, 4, 5]; 

const bigNumbers = numbers.map(number => {
  return number * 10;
});

看到“numbers”和“number”,它们都是不同的变量,那么程序如何识别“number”指的是数组内的单个数据?

我的问题是,我觉得“number”变量不知从何而来,但程序似乎确切地知道它的作用。

最佳答案

回调及其​​参数由 Array.prototype.map 内部处理。要亲自了解它如何工作,您可以定义自己的函数来执行类似的操作,并调用传递给它的回调:

function myMap(callback) {
  const inputArr = this;
  const newArr = [];
  for (let i = 0; i < inputArr.length; i++) {
    newArr.push(
      callback(inputArr[i], i, inputArr)
    );
  }
  return newArr;
}

const numbers = [1, 2, 3, 4, 5]; 

const bigNumbers = myMap.call(numbers, number => number * 10);
console.log(bigNumbers);

number 参数并不是凭空出现的 - 它是您为回调函数定义的参数,其中(对于 Array.prototype.map )spec guarantees 对应于正在迭代的数组中的项目。 (您可以根据需要使用任意数量的参数)

关于javascript - 无法理解 JS 中的回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52287052/

相关文章:

javascript - 可以在不使用 iframe 的情况下更改 div 的 location.href 吗?

javascript - 当函数创建并返回对象时会发生什么?

javascript - 中断 fadeTo 函数

reactjs - 如何等待 aws cognito authenticateUser 调用(这似乎是一个回调)

javascript - bulkDelete 如何工作?

javascript - 如何将两个16位整数(高位字/低位字)转换为32位 float ?

javascript - 正则表达式问题,与两列条目不匹配

r - 编写创建列的 R 函数

java - 更新的 Android SDK 向我的应用程序添加了错误

node.js - NodeJS : callback and Async calls