Javascript 将全局变量的引用传递给函数

Javascript 将全局变量的引用传递给函数,javascript,global-variables,parameter-passing,Javascript,Global Variables,Parameter Passing,是否可以向JavaScript中的函数发送指向全局变量的链接? 说不,但我不敢相信,没有解决办法 我的意思是这样的。它不起作用,但它将解释我的意思: var data_1; var data_2; fillValue(data_1,"First"); fillValue(data_2,"Second"); function fillValue(link2GlobalVar, value){ link2GlobalVar = value; } console.log(data_

是否可以向JavaScript中的函数发送指向全局变量的链接? 说不,但我不敢相信,没有解决办法

我的意思是这样的。它不起作用,但它将解释我的意思:

var data_1;
var data_2;

fillValue(data_1,"First");
fillValue(data_2,"Second");

function fillValue(link2GlobalVar, value){
    link2GlobalVar = value;
}   

console.log(data_1);
console.log(data_2);
如果可以在控制台中输出,那就太好了

First
Second
你知道一个将全局变量发送到函数并像这样在函数中更改它们的技巧吗


请参见

JavaScript不像其他语言那样具有引用。当您执行
fillValue(数据_1,“第一”)您正在按值传递数据。因此,您无法更新
数据\u 1
,因为在函数中,您所拥有的只是数据的副本

如果这些变量是全局变量,则可以按照链接答案的建议执行操作,并传递变量名称:

fillValue("data_1", "First");
fillValue("data_2", "Second");

function fillValue(link2GlobalVar, value){
    window[link2GlobalVar] = value;
}
更新: 在JavaScript中,如果您将对象作为参数传递,那么它实际上是通过引用传递的。您可以尝试以下方法:

var datas = {};

fillValue(datas, "data_1", ,"First");
fillValue(datas, "data_2", "Second");

function fillValue(obj, key, value){
    obj[key] = value;
}

基元值不是通过引用传递的。 对象是

如果将全局变量包装到对象中,则可以通过函数修改其属性:

var数据_1={};
变量数据_2={};
填充值(数据_1,“第一”);
填充值(数据_2,“秒”);
函数fillValue(link2GlobalVar,value){
link2GlobalVar.value=值;
}   

文件写入(数据1.value+“
”+数据2.value)这个问题似乎有点疯狂,但您可以将全局名称作为字符串传递,然后使用eval设置:

函数blah(nameAsString,val){eval(“窗口”+name+“=”+val);}


更疯狂!:)

像这样->看@blex-这是相同的答案,只是解释得更好了。@adeneo对不起,我被迷住了,认为OP已经传递了一个字符串作为变量名,如中所示+1@blex-事实上,蜡笔答案似乎是错误的,因为它没有传递字符串,而且这个答案不起作用。如果我们不想假设有一个浏览器,因此有一个
窗口
对象,这会更好吗?我愿意承认(并删除我的答案)它被作为变量引用而不是字符串传递(虽然我真的责怪OP,而不是我的答案),但我想你们都看得太远了,lolI喜欢这个,而不是我自己的答案。它可能更接近OP想要的。我不会实际使用
这个
。它在“严格模式”下不工作。来自:“在浏览器中,无法再通过严格模式函数中的
this
引用
窗口
对象。”感谢node.js的提示!谢谢你的评论,@RocketHazmat。我修改了第二个解决方案,使其能够解决这个问题。在我的chromium、firefox和node上工作。这是一个潜在的安全漏洞(而且是一个巨大的漏洞),除非你对其进行清理。请不要这样做。为什么要在
window[name]
上使用
eval()
内部
eval()
而不使用
eval()
?如果应该使用字符串构造变量,那么使用eval的选项实际上是一个很好的选项。我试图让这个示例运行(),但没有成功。有办法解决这个问题吗?