解释函数的参数保存参数



我正在研究回调概念,通常我会看到一个被用作"函数呼叫"的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;
}

看。如果要处理数组的每个项目并获取包含字符串表示的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));

如果您现在想提高所有这些并获得另一个数组怎么办?

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.toUpperCase()));

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

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

这是一种可接受的方法?

是的,这是一种可接受的方法。这是一种非常现代的方法。您有一个功能,每个项目都可以通过任何逻辑传递给它。在JavaScript中,使用此样式的函数中有许多构建(例如 Array#Map Array#foreach )。还有很多库具有这种类型的功能。这不仅在Javacript中。

您可以通过首先检查函数来确保调用回调函数,例如:

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

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

最新更新