Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:创建返回函数的函数,该函数根据输入参数返回值或对象_Javascript_Function_Object_Callback_Return - Fatal编程技术网

JavaScript:创建返回函数的函数,该函数根据输入参数返回值或对象

JavaScript:创建返回函数的函数,该函数根据输入参数返回值或对象,javascript,function,object,callback,return,Javascript,Function,Object,Callback,Return,我想: 创建一个函数saveOutput,该函数接受一个函数(将接受一个参数)和一个字符串(将用作密码)。saveOutput随后将返回一个与传入函数行为完全相同的函数,除非密码字符串作为参数传入。发生这种情况时,返回的函数将返回一个对象,其中所有以前传入的参数都作为键,相应的输出作为值 我尝试了以下代码: const saveOutput = (inputFunc, str) => { let newObj = {}; return function (value) {

我想:

创建一个函数saveOutput,该函数接受一个函数(将接受一个参数)和一个字符串(将用作密码)。saveOutput随后将返回一个与传入函数行为完全相同的函数,除非密码字符串作为参数传入。发生这种情况时,返回的函数将返回一个对象,其中所有以前传入的参数都作为键,相应的输出作为值

我尝试了以下代码:

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中没有存储值。