在Javascript中获取if else语句的结果超出范围

时间:2018-04-29 17:34:54

标签: javascript function if-statement scope

在这段代码中,我目前将addToOutput变量的值捕获在if else语句中,其方式是我无法将该变量的值传递到语句之外。我希望得到这个值,以便当用户输入一个数字(例如930)时,该函数将输出900 + 30 + 0。为了编译结果,我有变量"输出"但如果它无法从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 :(得分:1)

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和许多其他语言中):您将数据传递给函数,该函数对数据进行操作,并返回结果。除此之外还有更多,但这是基本的事情。

答案 1 :(得分:0)

如第一个答案所述,返回值是一种非常好的方法。但是,我认为值得通过引用和值添加一些有关参数的信息。

通常被称为&#34;原始&#34;类型(字符串,数字,布尔值等)按值传递,这意味着当您离开函数时,值的更改将丢失。但是对象是通过引用传递的,这意味着在函数返回后仍然会有更改。所以在上面的例子中,所有这些都是按值传递的。但想象一下你这样做了:

 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包含您的四个参数。这是通过引用传递的,因此更改将持续存在。

同样,这只是返回值的另一个选项。如果您需要多个返回值,它可能是一个有用的工具。