Javascript 变量没有在函数内部更新

Javascript variable is not updating inside function

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
有人可以解释为什么当参数名称也是“number”

时数字没有在函数内部更新它的值吗

在第一个片段中,参数 隐藏了 number 变量 - 它创建了一个名为 number 的变量,该变量是函数的局部变量,然后更新它。

在第二个代码段中,甚至没有使用参数,而是直接更新了 number 变量。您可以在没有参数的情况下编写相同的函数:

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

第一个代码片段创建了一个局部变量 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);

在第二个片段中,您直接更新了在函数 change 外部定义的 number,因此您会看到更新后的值。

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