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