javascript - 回调函数未执行

标签 javascript function callback

返回的数组应该是[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/

相关文章:

php - 如何使用php打印网页的某些部分?

javascript - 如果使 jquery 函数可在选择器上调用,我如何在被调用函数中检索选择器?

ios - 如何在 secondVC 中发生更改时自动实时更新 firstVC 中的 UITableViewCell

c# - 任务完成时运行函数

javascript - jQuery '.click(callback)' 阻止默认事件

javascript - typescript - "... is not a function or its return value is not iterable"

c++ - 将指向 C++ 成员函数的指针传递给 C API 库

java - 等待多个回调发生后再继续

javascript - Paper.js : why does tool. onMouseDown 不触发?

string - Scala Function block 作为字符串到函数