无法理解JS中的回调函数

时间:2018-09-12 03:25:34

标签: javascript function callback

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

这基本上是一个“语法”问题,我在练习示例中注意到,我看到回调始终使用从未在代码中指定的参数,并且程序仍然可以使它正常工作。 / p>

示例:

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

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

请参阅“数字”和“数字”,它们都是不同的变量,那么程序如何识别“数字”是指数组内部的单个数据?

我的问题是我觉得“数字”变量无处不在,但是程序似乎确切知道它的作用。

2 个答案:

答案 0 :(得分:1)

回调及其​​参数由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参数并非毫无用处-它是您为回调函数定义的参数,其中spec guarantees对应于其中的项(对于Array.prototype.map)被迭代的数组。 (您可以根据需要使用任意数量的参数)

答案 1 :(得分:0)

您可以将回调视为发生某种情况后被调用的常规函数​​。 map函数是数组中最有用的函数之一。基本上,它循环遍历数组中的每个值,并使用返回的值代替原始值。最好的部分是它不会修改原始数组。

返回您所要求的功能。使用ES5语法可能更容易理解。当map遍历数组中的每个元素时,它会将元素作为回调函数中的第一个输入参数(即变量number)传递,因此可以在函数内部使用。

var bigNumbers = numbers.map(function(number){
  return number * 10;
});