函数中的变量混淆
Variables within Functions confusion
我想知道是否有人能帮助我理解为什么函数内的名称与函数外的名称变量无关。如果你想在函数中更改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()方法类似的函数。如果你计算出了作用域,函数通常可以为任何值工作。如果您只是更改参数的名称,那么您就得到了一个仅适用于一个全局变量的函数。
相关文章:
- 带有两个变量函数的Ajax提交表单
- 设置变量函数不起作用
- 为什么使用 ||在变量函数声明中
- Javascript 变量函数不保留值
- 为什么要在函数定义之外引用静态变量(函数属性)
- jQuery 变量函数无法运行
- 循环中的变量函数定义
- javascript onclick设置为变量函数名
- JavaScript:调用已启动类(数据包处理程序)的变量函数
- Javascript测试存根全局变量函数
- Aptana能否识别其他文件中定义的变量/函数
- jquery将其传递给变量函数
- 传递一个变量函数到数组[Javascript]
- 如何使用' this '像一个对象,并通过字符串获得它的变量/函数
- javascript变量/函数的首字母是什么意思?
- Javascript .apply带有变量函数名
- 在JavaScript中添加一个全局变量/函数(特别是NativeScript)
- 变量函数未定义错误
- AngularJS-继续检查变量/函数
- Javascript从本地向全局变量函数添加行