我正在研究回调概念,经常看到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个独立的函数。通过传递参数,我们使函数具有通用性,因此我们为单个函数提供了处理每个项目的逻辑并返回结果。
它将为每个项目调用该函数,将该项目作为参数传递给函数并返回结果。然后,将结果放入新的映射数组中。
那可以接受的方法呢?
是的,这是可以接受的方法。这是一种非常现代的方法。您有一个函数,该函数对每个项目都会传递任何逻辑。在Javascript中,有许多使用此样式的内置函数(例如Array#map,Array#forEach)。还有很多库都具有此类类型函数,这不仅在Javacript中。