【问题标题】:Why can't I return a value multiple times - like in a for-loop?为什么我不能多次返回一个值 - 就像在 for 循环中一样?
【发布时间】:2019-05-02 17:35:20
【问题描述】:

当我运行这个 sn-p 时,我得到“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));

【问题讨论】:

  • return 语句导致其包含函数立即退出。
  • 因为return 返回。如果要返回多个值,则需要返回数组或其他类型的集合。
  • 而不是只在 for 循环中返回 console.log,然后在函数结束时返回
  • 不是真的; break 只是退出循环。 return 退出函数。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • FWIW,return 退出函数的事实并非特定于 JavaScript。大多数语言都是这样工作的。 return 意味着将控制权交还给函数的调用者,因此能够从 single 调用多次返回是没有意义的。

标签: javascript higher-order-functions


【解决方案1】:

return 语句停止函数的执行(如果指定,则返回一个值)。这是没有商量余地的。

这个返回值可以是任何东西,一个基元、一个对象、一个函数、一个数组等等。也许返回一个 5 长的数组会满足你的需要?

或者,如果你想输出一个值,跳出一个函数,但再次调用时从同一个地方恢复,阅读生成器和yield语句。

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

【讨论】:

  • 我将在 CodeAcademy 中完成基础知识后立即查看
【解决方案2】:

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

现在,您可以查看一下 sn-p 代码并了解 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);

【讨论】:

    【解决方案3】:

    正如其他人指出的那样,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);
    } );

    【讨论】:

      猜你喜欢
      • 2019-08-20
      • 2019-06-26
      • 1970-01-01
      • 2019-05-27
      • 1970-01-01
      • 2018-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多