解释保存参数的函数参数

时间:2017-09-22 10:48:25

标签: javascript callback

我正在研究回调概念,我常常看到其中一个f参数被用作“函数调用”:callback(arr [i])但它还不是函数。我想我们预计其中一个参数是一个函数,所以这是一个可接受的方法?

参考:

function processArray(arr, callback) {
    var resultArr = new Array();
    for (var i = arr.length - 1; i >= 0; i--)
        resultArr[i] = callback(arr[i]);
    return resultArr;
}

3 个答案:

答案 0 :(得分:2)

看。如果要处理数组的每个项并获取包含aws字符串表示的新数组,则可以执行



length




如果你现在想要将所有这些大写并获得另一个数组怎么办?



function processArray(arr, callback) {

    if(typeof callback !== 'function') {
        throw new Error('The callback is not a function');
    }

    const resultArr = new Array();
    
    for (var i = arr.length - 1; i >= 0; i--) {
        resultArr[i] = callback(arr[i]);
    }
    
    return resultArr;
}

const weekdays = ['Monday', 'Tuesday', 'Wednesday'];
console.log(processArray(weekdays, item => item.length));




对于这两项操作,如果我们不传递回调函数,我们需要使用自己的操作创建2个单独的函数。通过传递参数,我们将函数泛型,因此我们为单个函数提供逻辑如何处理每个项目并返回结果

它将为每个项调用该函数,将该项作为参数传递给函数并返回结果。然后我们将结果放入新的映射数组中。

这是一种可接受的方法呢?

是的,这是一种可接受的方法。这是一种非常现代的方法。你有一个功能,每个项目都会传递给你的任何逻辑。在Javascript中,有许多使用此样式的函数构建(例如Array#mapArray#forEach)。此外,很多库都有这样的类型函数。这不仅仅是在Javacript。

答案 1 :(得分:1)

你可以通过先检查它是一个函数来确保调用回调函数,如下所示:

function processArray(arr, callback) {
    var resultArr = new Array();
    for (var i = arr.length - 1; i >= 0; i--)
        resultArr[i] = typeof callback === "function" && callback(arr[i]);
    return resultArr;
}

如果callback不是函数,则resultArr[i]将设置为false

如果你想将resultArr[i]设置为null(或其他一些值),这样的话也会有效:

resultArr[i] = typeof callback === "function" ? callback(arr[i]) : null

答案 2 :(得分:1)

callback是一个包含函数的变量,您将其作为参数传递。当然,验证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 callback = function () { /* do something */ }
processArray([1, 2, 3], callback) // callback will hold a function you've assigned