Получение результата оператора if else вне Javascript - PullRequest
0 голосов
/ 29 апреля 2018

В этом коде в настоящее время у меня есть значение переменной addToOutput, захваченное внутри оператора if else так, что я не могу получить это значение переменной вне оператора. Я хочу вывести это значение так, чтобы, когда пользователь вводит число (например, 930), функция выдала 900 + 30 + 0. Для компиляции результатов у меня есть переменная «output», но если она не может получить значение из addToOutput, я не смогу получить желаемый результат. Как я могу сделать так, чтобы значение addToOutput находилось в области видимости?

function expandedForm(num) {

  let stringOfNumber = num.toString();
    let numberArray = Array.from(stringOfNumber);
    let zero = "0";
    let output;
    let addToOutput;
    for (let i=0; i<numberArray.length; i){
       let firstNumber = numberArray.shift();
       let arraySize = numberArray.length;

       ifElse(arraySize, firstNumber,zero)

       output = output + addToOutput;
    }
}

function ifElse (arraySize, firstNumber, zero, addToOutput){
    if(arraySize > 0){
      let numberOfZeros = zero.repeat(arraySize);
      addToOutput=firstNumber+ numberOfZeros + " + ";

      return(addToOutput);
    }
    else{
      addToOutput = firstNumber;
      return(addToOutput);
    }
 }
expandedForm(930);

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Возврат значения - очень хороший способ сделать это, как указано в первом ответе. Однако я подумал, что стоит добавить некоторую информацию об аргументах по ссылке и по значению.

То, что часто называют «примитивными» типами (строки, числа, логические значения и т. Д.), Передается по значению, что означает, что изменения значения теряются при выходе из функции. Но объекты передаются по ссылке, что означает, что изменения остаются после возврата функции. Итак, в вашем примере выше все они передаются по значению. Но представьте, что вы сделали это вместо этого:

 var o = {arraySize, firstNumber,zero, addToOutput};
 console.log(o.addToOutput);
 ifElse(o);
 console.log(o.addToOutput); // value may be different now!

 function ifElse (o) {
    if(o.arraySize > 0){
      let numberOfZeros = zero.repeat(o.arraySize);
      o.addToOutput=o.firstNumber+ numberOfZeros + " + ";
    }
    else{
      o.addToOutput = o.firstNumber;
    }
 }

Теперь вы передаете объект o, который содержит ваши четыре параметра. И это передается по ссылке, поэтому изменения будут сохраняться.

Опять же, это всего лишь еще один вариант возврата значения. Если вам нужно более одного возвращаемого значения, это может быть полезным инструментом.

0 голосов
/ 29 апреля 2018

Удалите параметр addToOutput из ifElse и просто return возвращаемое значение (см. *** строки):

function ifElse (arraySize, firstNumber, zero){  // ***
    if(arraySize > 0){
      let numberOfZeros = zero.repeat(arraySize);
      return firstNumber+ numberOfZeros + " + "; // ***
    }
    else{
      return firstNumber;                        // ***
      return(addToOutput);
    }
}

Затем при вызове используйте это возвращаемое значение:

addToOutput = ifElse(arraySize, firstNumber, zero);

Это фундамент программирования (на JavaScript и многих других языках): вы передаете данные в функцию, функция оперирует данными и возвращает результат. Это еще не все, но это основная вещь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...