JavaScript:创建返回函数的函数,该函数根据输入参数返回值或对象
我想: 创建一个函数saveOutput,该函数接受一个函数(将接受一个参数)和一个字符串(将用作密码)。saveOutput随后将返回一个与传入函数行为完全相同的函数,除非密码字符串作为参数传入。发生这种情况时,返回的函数将返回一个对象,其中所有以前传入的参数都作为键,相应的输出作为值 我尝试了以下代码:JavaScript:创建返回函数的函数,该函数根据输入参数返回值或对象,javascript,function,object,callback,return,Javascript,Function,Object,Callback,Return,我想: 创建一个函数saveOutput,该函数接受一个函数(将接受一个参数)和一个字符串(将用作密码)。saveOutput随后将返回一个与传入函数行为完全相同的函数,除非密码字符串作为参数传入。发生这种情况时,返回的函数将返回一个对象,其中所有以前传入的参数都作为键,相应的输出作为值 我尝试了以下代码: const saveOutput = (inputFunc, str) => { let newObj = {}; return function (value) {
const saveOutput = (inputFunc, str) => {
let newObj = {};
return function (value) {
if (value === str){
return newObj[value] = inputFunc(value)
}
// return a function that behaves exactly like the passed-in function
else {
return inputFunc(value)
}
}
}
// Uncomment these to check your work!
const multiplyBy2 = function(num) { return num * 2; };
const multBy2AndLog = saveOutput(multiplyBy2, 'boo');
console.log(multBy2AndLog(2)); // should log: 4
console.log(multBy2AndLog(9)); // should log: 18
console.log(multBy2AndLog('boo')); // should log: { 2: 4, 9: 18 }
我的代码返回:
console.log(multBy2AndLog(2)); // returns 4
console.log(multBy2AndLog(9)); // returns 18
console.log(multBy2AndLog('boo')); // returns NaN
为什么我的第三个也是最后一个console.log返回NaN,而它应该返回:
{ 2: 4, 9: 18 }
当
value==str
时,必须将newObj
赋值移动到else
子句并返回newObj
:
if (value === str){
return newObj;
}
// return a function that behaves exactly like the passed-in function
else {
newObj[value] = inputFunc(value);
return inputFunc(value);
}
现场示例:
const saveOutput=(inputFunc,str)=>{
设newObj={};
返回函数(值){
如果(值===str){
返回newObj;
}
//返回一个与传入函数行为完全相同的函数
否则{
newObj[value]=inputFunc(值);
返回inputFunc(值)
}
}
}
//取消这些注释以检查您的工作!
constmultilyby2=函数(num){returnnum*2;};
const multBy2AndLog=saveOutput(multiply2,'boo');
console.log(multBy2AndLog(2));//应记录:4
console.log(multBy2AndLog(9));//应记录:18
console.log(multBy2AndLog('boo'));//应该记录:{2:4,9:18}
,因为它返回赋值的结果,即boo*2
,这是Nan,而且第一个条件仅在最后一次调用时被调用,因此此时newObj中没有存储值。