javascript - JavaScript:调用添加函数返回新数组的高阶函数;错误:输出数组中的“NaN”元素
问题描述
我“有时”有一个函数,想从中返回一个函数对象。
下面是我的代码:
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 ]
我究竟做错了什么?
解决方案
您没有将参数传递给包装函数。该add
函数尝试对两个undefined
值求和,结果是NaN
(不是数字)。
您必须将参数传递给包装函数:
return function(a, b) {
return inputFunc(a, b); // <<<
}
由于sometimes
是高阶函数,需要包装不同的函数,参数个数不断变化,无法知道被包装函数的实现。为确保这一点,您应该使用rest 参数(将参数收集到数组)和spread(将数组转换回参数)将参数传递给包装函数。
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);
推荐阅读
- excel - 更新 zip 后更新 MS Word 中的工作表对象
- php - preg_match() : wordpress 网站中的 nextgen-gallery 插件错误
- javascript - 告诉 async() 函数等待完成 - Puppeteer 自动化项目
- google-translate - Google Translation V3 API - 词汇表资源错误
- postgresql - 如果其他表列具有值 else false,postgresql 更新 true
- python - 如何加载用于 CPU 推理的火炬模型
- google-app-engine - gcloud app deploy 在 Windows 上静默失败
- android - 如何在导航组件中为多个片段提供相同的参数?
- reactjs - 如何使用 Expo React Native 创建白标项目
- git - 使用 .git 创建 git 存储库的存档