变量作为参数再次传递回变量

Variable passed as Parameter back to Variable again

本文关键字:变量 参数      更新时间:2023-09-26

好的,我不知道我是否能够完全描述我正在做的事情的范围,但希望我能在这里传达一些内容,希望有人能理解。所以…

我在javascript中定义了这些全局变量,即:

var abc = '';
var def = '';
var ghi = '';

有了这些变量,我以后可以通过函数在脚本中定义它们。因此,它们稍后可被其他函数重用。那部分我做得很好。现在我有一个有趣的想法,让我困惑在哪里。在这种情况下,变量最终是我从一个函数传递到另一个函数的对象,我可以使用它进行各种比较,并根据需要更新它。现在我已经到了需要在一个特定函数的末尾重新定义整个对象的地步。但我只是在物体本身周围传递,所以失去了对哪个物体是起点的参考。

所以现在我想知道有没有一种方法可以重新定义它,比如说我的功能是

function monkey(var)
{
   //code to do stuff
   //something here after stuff to redefine var as the object it once was referenced
   //example ghi = something_from_code_generation_above
}
monkey(abc);
monkey(def);
monkey(ghi);

其中,在进行类似调用之后,abc对象更新、def对象更新或ghi对象更新。但将其限制在功能范围内,而不是像那样通过关闭

ghi = monkey(ghi);

我知道如何做到这一点的唯一方法是将封闭作用域作为一个额外的参数传递,并传递名称,而不是变量的

monkey(window, "abc"); // sends the global variable "abc" and allows it to be modified
function monkey(scope, name)
{
    var v = scope[name];
    // do stuff to v
    scope[name] = whatever; // destructively updates the variable in the original scope
}

如果您已经知道传递的所有变量都将在特定的范围内(例如,它们都是某个已知命名对象的一部分),则可以通过字符串传递变量名。

如果它们都是全局变量,正如你在问题中指出的那样,请执行:

monkey("abc"); // instead of monkey(abc);
function monkey(name)
{
    var v = window[name];
    window[name] = whatever; // updates the global variable by name
}

不确定这是你想要实现的。

function monkey(my_var)
{
   console.log('Im ', my_var.id);
}
abc = {id: 'abv'};
def = {id: 'def'};