我想知道是否有人能帮助我理解为什么函数内的名称与函数外的名称变量无关。如果你想在函数中更改name的全局变量,有办法吗?
var name = "Paul";
function test(name){
name = name || 'You';
console.log(name);
}
test('Mario');
console.log(name);
更新:谢谢你们的快速回复。所以,如果你一行一行地运行它,这就是发生的事情吗?
一旦你将Mario传递到函数中,它就会用传递给函数的名称替换所有名称实例?所以反过来你会得到:
"Mario" = "Mario" || 'You';
但如果你什么都没通过:
test();
那么name不就是name吗?为什么要采用||语句?
var name = "Paul";
function test(nameInput){
name = nameInput || 'You';
console.log(name);
}
关键问题是,您有一个同名的局部变量和一个全局变量。局部变量将优先于全局变量。重命名输入变量,以便能够同时引用这两个变量。
您有一个全局变量name
和一个函数参数name
。当调用test
时,name
参数将变为局部变量,遮蔽全局变量。如果你想访问全局变量,你必须更改其中一个变量名,这样局部变量/参数就不会覆盖全局变量。
main
清除全局name
变量(阴影)的可见性。因此,您应该重命名参数以访问全局参数。
在您的示例中,变量"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
函数中对name
的更改是函数的本地更改。如果要更改全局变量,则需要从函数中返回更改后的name
。
function test(name){
name = name || 'You';
console.log(name);
return name;
}
name = test('Mario');
对于每个说要为参数使用不同名称的人来说,如果你对范围以及全局和局部变量的混合感到困惑,这并不能解决你可能遇到的所有问题。
OP似乎想要一个与Python dict get()方法类似的函数。如果你计算出了作用域,函数通常可以为任何值工作。如果您只是更改参数的名称,那么您就得到了一个仅适用于一个全局变量的函数。