我正在学习JS,并试图了解回调。我发现了一个链接:How to explain callbacks in plain english? How are they different from calling one function from another function? 在接受的答案中,使用回调的解决方案如下:
function processArray(arr, callback) {
var resultArr = new Array();
for(var i = arr.length-1; i >= 0; i--)
resultArr[i] = callback(arr[i]);
return resultArr;
}
var arr = [1, 2, 3, 4];
var arrReturned = processArray(arr, function(arg) {return arg * -1;});
alert(arrReturned);
然而,当我尝试不使用如下回调时做同样的事情时,我得到了与上面相同的答案。
function processArray2(arr) {
var resultArr = new Array();
for(var i = arr.length-1; i >= 0; i--)
resultArr[i] = negate(arr[i]);
return resultArr;
}
function negate(n) {
return n*-1;
}
var arr = [1, 2, 3, 4];
var arrReturned2 = processArray2(arr);
alert(arrReturned2);
如果没有回调可以完成同样的事情,为什么我们需要在上面的例子中使用回调。我知道我肯定错过了什么。但我似乎无法明白什么。
答案 0 :(得分:1)
通常,没有严格的需要来使用回调。无论何时使用回调,您都可以直接调用该函数。那就是......只要你确切地知道这个函数是什么,所以你可以在你的源代码中引用它!
如果您在学习时可以避免回调,那么您可能会更容易。
也就是说,它们是JS不可或缺的一部分,随着您的进步,它将变得必不可少。 JS开发人员使用它们与浏览器进行交互。需要回调的一个主要例子是XHR对象(如果您从未听说过它们,请不要担心,在您学习它们时可能还为时过早。)
答案 1 :(得分:0)
在您的问题的上下文中,回调可以用作将函数作为变量放入另一个函数的方式。
reduce

adder
已创建,可用于许多功能。 (除了可读性)如果您仅使用reduce
一次,则可以将其作为参数放入adder
。如果您在应用中多次使用reduce
,最好将其作为var
或const
传递给const adder = ...
{{{ 1}})。
This post可能会让您更好地了解功能是如何的?#34;一流公民"在JS中,以及如何在您的问题之外的其他上下文中使用回调。