为什么我不能多次返回值-就像在for循环中一样?

时间:2019-05-02 17:35:20

标签: javascript higher-order-functions

运行此代码段时,我得到“ 4”作为输出,但是我想将值“ 4”返回5次。

这是为什么,我该如何解决?

function addTwo(num){
  return num + 2;
}

function checkConsistentOutput(func, val){
  let first = func(val);
  let second = func(val);
  if(first === second){
    for(let i = 0; i < 5; i++){
    return first;
    }
  }else{
    console.log("This function returned inconsistent results");
  }
}

console.log(checkConsistentOutput(addTwo, 2));

3 个答案:

答案 0 :(得分:4)

return语句停止执行功能(如果指定,则返回值)。这是不能商量的。

该返回值可以是任何东西,原语,对象,函数,数组等。也许返回5个长数组符合您的需求?

或者,如果要输出值,请跳出函数,但再次调用时从同一位置继续,请阅读有关生成器和yield语句的信息。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators

答案 1 :(得分:1)

实际上,问题是,当您在return循环中使用for时,它会立即从循环中返回,如果您需要4 5次,则可以使用console.log()或使用计数器来计算您4的出现次数,然后可以从该计数器中判断条件是通过还是失败

现在,您可以看一下代码片段,并查看console.log的工作方式

function addTwo(num){
  return num + 2;
}

//Is addTwo stable?
function checkConsistentOutput(func, val){
  let first = func(val);
  let second = func(val);
  if(first === second){
    for(let i = 0; i < 5; i++){
    console.log(first);
    }
  }else{
    console.log("This function returned inconsistent results");
  }
}

checkConsistentOutput(addTwo, 2);

答案 2 :(得分:0)

正如其他人指出的那样,return行打破了for ...循环并返回了始发呼叫。如果确实需要某个函数重复返回,则可以尝试使用回调函数来处理每个交互。

function addTwo(num){
  return num + 2;
}

function checkConsistentOutput(func, val, callback){
  let first = func(val);
  let second = func(val);
  if(first === second){
    for(let i = 0; i < 5; i++){
      if ( typeof callback === "function" ){
        callback(first);
      }
    }
  }else{
    console.log("This function returned inconsistent results");
  }
}

checkConsistentOutput(addTwo, 2, function(res){
  console.log("Result: " + res);
} );