返回的数组应该是[1,2,3]
,但是[3,4,5]
被记录到控制台。有人可以向我解释一下为什么吗?
function forEach(array, callback) {
var newA = []
for (var i = 0; i < array.length; i++) {
newA.push(callback(array[i]));
}
}
function map(array, callback) {
forEach(array, callback)
return array
}
console.log(map([3, 4, 5], n => n - 2));
最佳答案
您的 map()
函数要求 forEach()
就地修改数组,而不是创建新数组。所以应该是:
function forEach(array, callback) {
for (var i = 0; i < array.length; i++) {
array[i] = callback(array[i]);
}
}
function map(array, callback) {
forEach(array, callback);
return array;
}
console.log(map([3, 4, 5], n => n - 2));
如果 map()
不应该修改其参数,您可以在调用 forEach()
之前复制该数组。
function forEach(array, callback) {
for (var i = 0; i < array.length; i++) {
array[i] = callback(array[i]);
}
}
function map(array, callback) {
array = array.slice();
forEach(array, callback);
return array;
}
var testArray = [3, 4, 5];
console.log(map(testArray, n => n - 2));
console.log(testArray);
关于javascript - 回调函数未执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51143193/