【问题标题】:Why does changing the value of function return will change the result of function console.log?为什么改变函数return的值会改变函数console.log的结果?
【发布时间】:2019-05-03 20:13:34
【问题描述】:

如果我输入代码return amountconsole.log(amount),它将是1250,但如果我输入return balanceconsole.log(amount),它将是9250!为什么这么不一样,我不明白。能给我解释一下吗?

//Declare variable;

var balance = 10500; // a global variable

var amount = steal(balance, 1250); // a global variable

//Function;

function steal(balance, amount) {

    if (amount < balance) {

        balance = balance - amount;

    }

    return amount;

}

console.log(amount); // it will be 1250, cause parameter amount = 1250 

如果是return balanceconsole.log(amount) = 9250

【问题讨论】:

  • 您应该使用作用域变量,例如let
  • steal()返回 值被分配回 amount 变量:var amount = steal(balance, 1250);。这就是为什么结果会根据您从steal() 返回的内容而有所不同。
  • 你的函数应该return balance而不是return amount
  • 所以你的问题是,如果你返回不同的值,为什么结果会不同?当然是;这就是回报的目的。我在这里错过了什么吗?

标签: javascript


【解决方案1】:

因为当您返回金额时,steal 函数的值位于金额变量上,这等于 1250,而当您返回余额时,余额值(余额 - 金额 = 9250)位于金额变量上

var amount = steal(balance, 1250); // if return amount result will be 1250
var amount = steal(balance, 1250); // if return balance result will be 9250

窃取函数的返回值位于数量变量上!!! 这很简单!!!

【讨论】:

    【解决方案2】:

    您的日志语句记录顶部声明的变量:

    var amount = steal(balance, 1250);
    

    由于您将其设置为steal 的返回值,因此它会根据返回值更改您的内容,这不足为奇。


    函数创建一个新的变量作用域,并且参数存在于这个作用域中。参数amount不会改变外部作用域内的变量amount

    function steal(balance, amount) {
      // amount is a new variable unrelated to the amount from above
    }
    

    如果不是这样,那可能很难调试错误。

    【讨论】:

      猜你喜欢
      • 2013-10-29
      • 1970-01-01
      • 2011-09-28
      • 1970-01-01
      • 2016-07-11
      • 2018-03-25
      • 1970-01-01
      • 1970-01-01
      • 2018-07-28
      相关资源
      最近更新 更多