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
范围外的变量。您为什么想要这种行为?它会让你的代码有味道。