Почему я не могу вернуть значение несколько раз - как в цикле for? - PullRequest
0 голосов
/ 02 мая 2019

Когда я запускаю этот фрагмент, я получаю «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 ]

4 голосов
/ 02 мая 2019

Операторы return прекращают выполнение функции (и возвращают значение, если указано). Это не подлежит обсуждению.

Это возвращаемое значение может быть чем угодно, примитивом, объектом, функцией, массивом и т. Д. Может быть, возвращение массива длиной 5 будет соответствовать вашим потребностям?

В качестве альтернативы, если вы хотите вывести значение, выпрыгните из функции, но возобновите работу с того же места при повторном вызове, прочитайте о генераторах и операторе yield.

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

1 голос
/ 02 мая 2019

На самом деле проблема в том, что когда вы используете 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);
0 голосов
/ 02 мая 2019

Как уже отмечали другие, строка 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);
} );
...