回调不同于从另一个函数调用一个函数(JS)?

时间:2016-07-09 18:46:27

标签: javascript callback

我正在学习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);

如果没有回调可以完成同样的事情,为什么我们需要在上面的例子中使用回调。我知道我肯定错过了什么。但我似乎无法明白什么。

2 个答案:

答案 0 :(得分:1)

通常,没有严格的需要来使用回调。无论何时使用回调,您都可以直接调用该函数。那就是......只要你确切地知道这个函数是什么,所以你可以在你的源代码中引用它!

如果您在学习时可以避免回调,那么您可能会更容易。

也就是说,它们是JS不可或缺的一部分,随着您的进步,它将变得必不可少。 JS开发人员使用它们与浏览器进行交互。需要回调的一个主要例子是XHR对象(如果您从未听说过它们,请不要担心,在您学习它们时可能还为时过早。)

答案 1 :(得分:0)

在您的问题的上下文中,回调可以用作将函数作为变量放入另一个函数的方式。



reduce




adder已创建,可用于许多功能。 (除了可读性)如果您仅使用reduce一次,则可以将其作为参数放入adder。如果您在应用中多次使用reduce,最好将其作为varconst传递给const adder = ... {{{ 1}})。

This post可能会让您更好地了解功能是如何的?#34;一流公民"在JS中,以及如何在您的问题之外的其他上下文中使用回调。