Javascript 如何提取关闭某个变量的匿名回调?

Javascript 如何提取关闭某个变量的匿名回调?,javascript,callback,Javascript,Callback,我有一个使用Array.prototype.forEach并向其传递回调的函数。我想将该回调提取到一个单独的函数中,以便对其进行测试。问题是回调使用了外部函数中的一个参数,当然,回调的签名是由Array.prototype.forEach决定的,我无法更改它。有什么方法可以提取这个回调吗?代码示例如下: var enableMarks = function (arrEvents, arrGeneratedEvents) { var marksLength = arrEvents[0].mar

我有一个使用Array.prototype.forEach并向其传递回调的函数。我想将该回调提取到一个单独的函数中,以便对其进行测试。问题是回调使用了外部函数中的一个参数,当然,回调的签名是由Array.prototype.forEach决定的,我无法更改它。有什么方法可以提取这个回调吗?代码示例如下:

var enableMarks = function (arrEvents, arrGeneratedEvents) {
  var marksLength = arrEvents[0].marks().length;
  var generatedMark;
  var i;
  for (i = 0; i < arrGeneratedEvents.length; i++) {
    programEvents.forEach(function (programEvent) {
      if (programEvent.pairOrderToShow === arrGeneratedEvents[i]) {
        generatedMark = generateNumber(0, marksLength - 1);
      }
      //some other code here, not important for question
    });
  }
var enableMarks=函数(arrEvents、arrGeneratedEvents){
var marksLength=arEvents[0]。marks().length;
var生成标记;
var i;
对于(i=0;i
})


因此,我的回调函数使用了来自外部函数的ArrGenerateEvents,我不知道是否有可能以某种方式将其传递给提取的回调函数。

您可以这样尝试

var enableMarks = function(arrEvents, arrGeneratedEvents) {
  var marksLength = arrEvents[0].marks().length;
  var generatedMark;
  var i;
  // this is the callback function of forEach
  // beise element, it can also acceopt the index and the to traverse array
  function testFun(item) {
      if (programEvent.pairOrderToShow === arrGeneratedEvents[i]) {
        generatedMark = generateNumber(0, marksLength - 1);
      }
      //some other code here, not important for question
    }

  for (i = 0; i < arrGeneratedEvents.length; i++) {
    //calling the callback function here, & passing an argument
    programEvents.forEach(testFun);
  }
};
var enableMarks=函数(arrEvents、arrGeneratedEvents){
var marksLength=arEvents[0]。marks().length;
var生成标记;
var i;
//这是forEach的回调函数
//作为元素,它还可以访问索引和遍历数组
功能测试乐趣(项目){
if(programEvent.pairOrderToShow==ArrGenerateEvents[i]){
generatedMark=generateNumber(0,标记长度-1);
}
//这里还有其他一些代码,对这个问题不重要
}
对于(i=0;i

现在,您可以在代码中的任何位置将cbfunc作为函数调用。

我不确定这是否可行
testFun(elem to pass)
不计算为函数类型(并且
forEach
需要函数类型)。@OliverCharlesworth我在这里引用的第一个示例中,我没有看到任何示例不将函数类型传递给
forEach
;)@OliverCharlesworth,我明白你的意思了,很抱歉这是我这边的错误,我无法理解。编辑了答案。谢谢你指出这一点
let cbfunc = function (programEvent, index, arrGeneratedEvents,i) {
  if (programEvent.pairOrderToShow === arrGeneratedEvents[i]) {
    generatedMark = generateNumber(0, marksLength - 1);
  }
  //some other code here, not important for question
};

programEvents.forEach(cbfunc);