所以我目前正在刷新我的JS知识,而关于回调函数的一点让我感到困惑。
这基本上是一个“语法”问题,我在练习示例中注意到,我看到回调始终使用从未在代码中指定的参数,并且程序仍然可以使它正常工作。 / p>
示例:
const numbers = [1, 2, 3, 4, 5];
const bigNumbers = numbers.map(number => {
return number * 10;
});
请参阅“数字”和“数字”,它们都是不同的变量,那么程序如何识别“数字”是指数组内部的单个数据?
我的问题是我觉得“数字”变量无处不在,但是程序似乎确切知道它的作用。
答案 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;
});