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

时间:2013-02-07 21:32:43

标签: javascript jquery object parameters

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

我在我的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);

2 个答案:

答案 0 :(得分:1)

我知道如何执行此操作的唯一方法是将封闭范围作为额外参数传递,并传递名称,而不是传递变量的

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
}

答案 1 :(得分:0)

不确定这是你想要达到的目的。

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