【问题标题】:Getting the result of an if else statement out of scope in Javascript使 if else 语句的结果超出 Javascript 的范围
【发布时间】:2018-04-29 17:34:54
【问题描述】:

在这段代码中,我目前将 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);

【问题讨论】:

  • 你可以使用var addToOutput

标签: javascript function if-statement scope


【解决方案1】:

ifElse 中删除addToOutput 参数,并只将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 和许多其他语言中):您将数据传递给函数,函数对数据进行操作并返回结果。不止于此,但这是基本的东西。

【讨论】:

    【解决方案2】:

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

    通常所说的“原始”类型(字符串、数字、布尔值等)是按值传递的,这意味着当您离开函数时,值的变化会丢失。但是对象是通过引用传递的,这意味着函数返回后仍然存在变化。所以在你上面的例子中,所有这些都是按值传递的。但是想象一下,你这样做了:

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

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

    【讨论】:

      猜你喜欢
      • 2019-03-18
      • 1970-01-01
      • 2018-03-28
      • 2021-09-11
      • 1970-01-01
      • 2016-05-07
      • 2022-08-18
      • 1970-01-01
      • 2016-06-21
      相关资源
      最近更新 更多