【问题标题】:Javascript variable is not updating inside functionJavascript变量未在函数内部更新
【发布时间】:2021-03-16 19:54:26
【问题描述】:
let number = 100
 
function change(number) {
    number = number * 10;
}
 
change(number);
 
console.log(number);

上面的代码输出100,而

let number = 100
 
function change(blah) {
    number = number * 10;
}
 
change(number);
 
console.log(number);

输出 1000
有人可以解释为什么当参数名称也是“数字”时数字没有在函数内部更新其值

【问题讨论】:

标签: javascript pass-by-reference javascript-scope


【解决方案1】:

您可以使用与参数同名的变量,因为值无论如何都会相同,除非同名变量与参数的值不同 这是因为该函数的参数已经声明为该函数的本地参数。

【讨论】:

    【解决方案2】:

    第一个 sn-p 创建一个局部变量 number 作为函数参数,它会隐藏同名的外部变量。

    由于 JavaScript 是按值传递的,因此新变量被赋值为 100。由于变量的作用域是函数change,并且当你更新赋值时,函数作用域中定义的变量也会更新。

    let number = 100
     
    function change(number) {
        //This is the variable scoped to the function
        number = number * 10;
    }
    //This is the variable defined in the global scope
    change(number);
     
    console.log(number);
    

    在第二个 sn-p 中,您将直接更新在函数change 之外定义的number,因此您会看到更新后的值。

    【讨论】:

      【解决方案3】:

      在第一个 sn-p 中,参数隐藏 number 变量 - 它创建一个名为 number 的变量,该变量是函数的本地变量,然后更新它。

      在第二个sn-p中,甚至没有使用参数,而是直接更新了number变量。您可以编写相同的函数而无需参数:

      let number = 100
       
      function change() { // No parameter!
          number = number * 10;
      }
       
      change();
       
      console.log(number);
      

      【讨论】:

      • 如果change 没有参数,为什么在调用的时候还要传入一个参数?
      • @mwilson 很好 - 来自 OP 代码的糟糕的复制粘贴。已编辑并修复,感谢您的关注!
      猜你喜欢
      • 1970-01-01
      • 2022-11-21
      • 2016-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多