好的,我不知道我是否能够完全描述我正在做的事情的范围,但希望我能在这里传达一些层面,并希望有人会理解。所以..
我在我的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);
答案 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'};