javascript将参数值传递给相同的命名外部作用域变量
我将通过字符串javascript将参数值传递给相同的命名外部作用域变量,javascript,scope,Javascript,Scope,我将通过字符串a,b,c,但希望在通过函数后也能够访问它们 因此,如果我调用abc(“d”、“e”、“f”),我希望该函数使用这三个字符串运行,但之后,在它自己的范围之外,我还希望能够使用a=“d”、b=“e”和f=“f” 有人能解释一下这是怎么做到的吗?我认为,即使它们是在函数之外声明的,但它的名称相同这一事实让我很反感 我记得PHP中关于在参数之前添加&的内容 谢谢 如果外部作用域中的变量被同名函数参数屏蔽,则不能使用它们 如果它们是外部作用域中变量的命名属性,则可以。在浏览器中,全局变量实
a
,b
,c
,但希望在通过函数后也能够访问它们
因此,如果我调用abc(“d”、“e”、“f”)
,我希望该函数使用这三个字符串运行,但之后,在它自己的范围之外,我还希望能够使用a=“d”
、b=“e”
和f=“f”
有人能解释一下这是怎么做到的吗?我认为,即使它们是在函数之外声明的,但它的名称相同这一事实让我很反感
我记得PHP中关于在参数之前添加&
的内容
谢谢 如果外部作用域中的变量被同名函数参数屏蔽,则不能使用它们 如果它们是外部作用域中变量的命名属性,则可以。在浏览器中,全局变量实际上只是
窗口
变量的属性:
var a,b,c;
function abc(a,b,c){
console.log("a is"+ a + ", b is"+ b + ", c is"+ c);
}
a; // undefined
b; // undefined
c; // undefined
如果外部作用域中的变量被同名函数参数屏蔽,则不能使用这些变量 如果它们是外部作用域中变量的命名属性,则可以。在浏览器中,全局变量实际上只是
窗口
变量的属性:
var a,b,c;
function abc(a,b,c){
console.log("a is"+ a + ", b is"+ b + ", c is"+ c);
}
a; // undefined
b; // undefined
c; // undefined
我不知道你在问什么,但它只是开箱即用,就像你想要的那样 由于ECMAscript具有函数作用域,变量
a
、b
和c
将在abc()
的函数上下文中进行局部解析。这些国家的外部宣言
变量名(让我们称之为自由变量)将永远不会被访问,因为查找过程将首先在其*自己的上下文中找到这些名称,解析它们并停止
如果您只想设置作为父上下文一部分的自由变量,那么为了方便起见,您可能应该重命名形式参数,然后传递这些值
var myobj = {};
function abc(a, b, c) {
myobj.a = a;
myobj.b = b;
myobj.c = c;
}
// you can now use those values
希望声明
a
、b
和c
的父范围不是全局范围。这被认为是非常正确的坏习惯和因果报应,有几个原因。我不知道你在问什么,但它只是开箱即用,就像你想要的那样
由于ECMAscript具有函数作用域,变量a
、b
和c
将在abc()
的函数上下文中进行局部解析。这些国家的外部宣言
变量名(让我们称之为自由变量)将永远不会被访问,因为查找过程将首先在其*自己的上下文中找到这些名称,解析它们并停止
如果您只想设置作为父上下文一部分的自由变量,那么为了方便起见,您可能应该重命名形式参数,然后传递这些值
var myobj = {};
function abc(a, b, c) {
myobj.a = a;
myobj.b = b;
myobj.c = c;
}
// you can now use those values
希望声明
a
、b
和c
的父范围不是全局范围。这仍然被认为是错误的做法和因果报应,原因有两个。最佳做法是为内部变量指定不同的名称,例如,在它们前面加上“inner”或函数名的首字母缩写。然后,您不仅可以使用简单的a=innerA
将值分配给外部变量,还可以使代码更具可读性。最佳做法是为内部变量指定不同的名称,例如,在它们前面加上“inner”或函数名的首字母。然后,您不仅可以使用简单的a=innerA
将值分配给外部变量,还可以使代码更具可读性。首先,我认为您的意思是:
function abc(some, other, name) {
a = some;
b = other;
c = name;
}
尽管如此,我认为这种做法不是一种好做法。请在闭包或命名空间中组织它们。例如,以下是一个可接受的设计模式:
var a, b, c;
function abc(_a, _b, _c) {
a = _a;
b = _b;
c = _c;
}
abc(1, 2, 3);
console.log("a is"+ a + ", b is"+ b + ", c is"+ c); // 1, 2, 3
首先,我想你的意思是:
function abc(some, other, name) {
a = some;
b = other;
c = name;
}
尽管如此,我认为这种做法不是一种好做法。请在闭包或命名空间中组织它们。例如,以下是一个可接受的设计模式:
var a, b, c;
function abc(_a, _b, _c) {
a = _a;
b = _b;
c = _c;
}
abc(1, 2, 3);
console.log("a is"+ a + ", b is"+ b + ", c is"+ c); // 1, 2, 3
啊哈!好的,如果我明白你的意思,我可以用不同的方式命名参数,并将变量名设置为函数中的参数@是的,我想那是最方便的方式了。啊哈!好的,如果我明白你的意思,我可以用不同的方式命名参数,并将变量名设置为函数中的参数@莱特:是的,我想这是最方便的方式。你说的名字是一样的。参数变量
shadows
范围外的变量。您为什么想要这种行为?它让你的代码有一种味道。你说的名字是一样的。参数变量shadows
范围外的变量。您为什么想要这种行为?它会让你的代码有味道。