1
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
有人可以解释为什么当参数名称也是“数字”时数字没有在函数内更新其值

4

3 回答 3

1

第一个片段创建了一个局部变量number作为函数参数,它隐藏了同名的外部变量。

由于 JavaScript 是按值传递的,因此为新变量分配了 value 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);

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

于 2020-12-04T18:50:12.277 回答
0

在第一个片段中,参数隐藏number变量——它创建了一个number函数本地调用的变量,然后更新它。

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

let number = 100
 
function change() { // No parameter!
    number = number * 10;
}
 
change();
 
console.log(number);
于 2020-12-04T18:47:23.200 回答
0

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

于 2020-12-04T18:52:33.670 回答