@H_403_1@我正在尝试让中间件函数调用它进行调试,它应该带有一些参数,记录它们并传递给下一个函数:
@H_403_1@
const debug = (...args) => {
console.log(...args)
return args // will return array,not argument type variable
}
const compose = (...fns) => (...arg) => (
fns.slice().reverse().reduce(
(acc,fn) => !acc ? fn(...arg) : fn(acc),null
)
)
const f = x => x * x
const g = (a,b) => a + b
const makeMagic = compose(
f,g,debug
)
makeMagic(1,2)
@H_403_1@如果我从组合中删除调试,则一切都会按预期工作,一旦将其放置在末尾,它就会中断.因为它接受参数但返回数组.
@H_403_1@我试图用这种方式重写调试:
@H_403_1@
function debug() {
console.info(arguments)
return arguments
}
@H_403_1@但是它绝不会失败.最佳答案
函数始终只有一个结果值.您不能编写一个接受多个参数并“返回”多个值而不在它们周围没有某种容器的函数(如数组),这只是JavaScript所没有的功能(大多数其他编程语言也没有).
@H_403_1@您可以使debug为单个参数(而不是多个参数)提供纯传递.因此,例如,您可以进行以下工作:
@H_403_1@
原文链接:https://www.f2er.com/js/531261.htmlconst result = debug(makeMagic(1,2))
@H_403_1@…结果将是makeMagic返回的值(在调试日志记录后返回),但是您无法按照您尝试的方式将其包含在组合的makeMagic中.
@H_403_1@要在撰写过程的中间进行调试(或其他任何功能),您必须对其使用约定以及所有可撰写函数有关如何返回多个值的约定,可能是让它们都返回一个数组.这也有助于了解现在的情况,您的compose函数具有我认为是一个错误:每当上一个函数返回假值(0,“”,NaN,null,undefined或false时,它都会使用… args ),我非常确定您打算只在第一次通话时才这样做.
@H_403_1@这是compose的一个版本,该版本期望可组合函数,这些函数可返回其结果数组:
@H_403_1@
const debug = (...args) => {
console.log(...args);
return args;
};
const compose = (...fns) => (...args) => (
fns.slice().reverse().reduce(
(acc,fn) => fn(...(acc || args)),null
)
);
const f = x => [x * x];
const g = (a,b) => [a + b];
const makeMagic = compose(
f,debug
);
const result = makeMagic(1,2);
console.log(result);