我有一个“有时”的函数,想从中返回一个函数对象。下面是我的代码:let add = (a, b) => { return a + b; };myFunc = sometimes(add);const outputArr = []; for (let i = 0; i < 3; i++) { outputArr.push(myFunc(2 + i, 3 + i)); }function sometimes (inputFunc){ return function (a, b){ return inputFunc() }}outputArr 我希望我的 outputArr 变量等于:[5, 7, 9]相反,我的等于: [ NaN, NaN, NaN ]我究竟做错了什么?
1 回答

潇潇雨雨
TA贡献1833条经验 获得超4个赞
您没有将参数传递给包装的函数。该add函数尝试对两个undefined值求和,结果为NaN(不是数字)。
您必须将参数传递给包装函数:
return function(a, b) {
return inputFunc(a, b); // <<<
}
由于sometimes是高阶函数,需要包装不同的函数,参数数量不断变化,无法知道被包装函数的实现。为确保这一点,您应该使用剩余参数(将参数收集到数组)和传播(将数组转换回参数)将参数传递给包装函数。
let add = (a, b) => {
return a + b;
};
myFunc = sometimes(add);
const outputArr = [];
for (let i = 0; i < 3; i++) {
outputArr.push(myFunc(2 + i, 3 + i));
}
function sometimes(inputFunc) {
return function(...args) {
return inputFunc(...args)
}
}
console.log(outputArr);
添加回答
举报
0/150
提交
取消