0

我想知道是否有人可以帮助我理解为什么函数内的名称与函数外的名称变量无关。如果您想在函数中更改 name 的全局变量怎么办,有什么办法吗?

var name = "Paul";

function test(name){
  name = name || 'You';
  console.log(name);
}

test('Mario');

console.log(name);

更新:感谢大家的快速回复。因此,如果您逐行运行它,这是怎么回事?

一旦将 Mario 传递给函数,它会用传递给函数的名称替换所有 name 实例?所以反过来你得到:

  "Mario" = "Mario" || 'You';

但如果你什么都不通过:

test();

那不就是名字=名字吗?为什么要|| 陈述?

4

5 回答 5

2
var name = "Paul";   

function test(nameInput){
  name = nameInput || 'You';
  console.log(name);
}

关键问题是您有一个同名的本地和全局变量。局部变量将优先于全局变量。重命名输入变量以能够引用两者。

于 2013-07-07T23:07:38.997 回答
1

您有一个名为的全局变量name和一个名为的函数参数name。当你调用test时,name参数变成了一个局部变量,隐藏了全局变量。如果要访问全局变量,则必须更改其中一个变量名称,以便局部变量/参数不会影响全局变量。

于 2013-07-07T23:08:10.683 回答
0

有一个问题 - 参数main清除了全局name变量(阴影)的可见性。因此,您应该重命名参数以访问全局参数。

于 2013-07-07T23:07:46.653 回答
0

函数中的更改name是函数的局部变量。如果要更改全局变量,则需要name从函数中返回更改后的值。

function test(name){
  name = name || 'You';
  console.log(name);
  return name;
}

name = test('Mario');

对于每个说要为参数使用不同名称的人来说,如果您对范围感到困惑并混合使用全局变量和局部变量,这并不能解决您可能遇到的所有问题。

看来 OP 想要一个像 Python dict get() method一样工作的函数。如果您确定了范围,则该功能通常可以适用于任何值。如果您只是更改参数的名称,您将拥有一个仅适用于一个全局变量的函数。

于 2013-07-07T23:10:46.020 回答
0

在您的示例中,变量“name”正在函数的本地范围内重新定义。

为了让它以您希望的方式工作,您必须将局部变量命名为不同的名称,以便您可以将全局变量设置为另一个值。

这是一个示例:

var name = "Paul";

function test(newName){
    name = newName;
    console.log(name); // is now Mario
}

test('Mario');

console.log(name); // reads Mario from the global variable
于 2013-07-07T23:16:04.203 回答