【发布时间】:2026-02-15 14:45:01
【问题描述】:
我想知道是否可以通过名称将 JavaScript 中的全局变量传递给函数?
在我的用例中,我有两个全局变量 abc 和 xyz。当function1() 被调用时,我进行了AJAX 调用,并希望将响应用于某些工作并将值分配给变量abc。 function2() 和变量 xyz 存在相同的功能。所以我想提取这个assignValueToVariable() 函数并使其成为一个util方法。
但问题是,如果我像在function2() 中那样传递全局变量名,那么全局范围内的xyz 始终是未定义的。我怎样才能完成这项工作,以便我可以在function1() 和function2() 中使用相同的assignValueToVariable() 方法?
HTML
<button type="button" onclick="otherfunction();">Click Me</button>
JavaScript
var abc,
xyz;
function1();
function2();
function function1() {
//ajax call - get data and pass it to function
data = "123";
// this works. Since I'm directly refering global variable in the function
assignValueToVariableABC(data);
}
function function2() {
//ajax call - get data;
data = "456";
// this doesn't set the value to global variable
assignValueToVariable(xyz, data);
}
function otherfunction() {
//xyz is undefined here
console.log(abc + "--" + xyz);
}
function assignValueToVariable(varName, data) {
//assign value from data to variable
varName = data;
}
function assignValueToVariableABC() {
//assign value from data to variable
abc = data;
}
【问题讨论】:
-
这是不可能的。这是因为 javascript 总是按值传递,从不按引用传递。所以全局变量的值不会在作用域外改变。
-
您可以结帐my answer to this question。在您的情况下,您需要传递一个字符串
assignValueToVariable('xyz', data);,然后执行window[varName] = data。但正如我的回答中所述,不建议这样做......为什么不简单地xyz = data? -
如果你真的想要全局变量,为什么不直接做
abc = data;和xyz = data;呢?这里没有太多可以抽象的东西。 -
@FelixKling 在我的实际用例中分配值不是一行代码。这些全局变量包含图表和数据表等对象。我不想让对象初始化的 10-15 行代码到处重复
-
@RKodakandla:然后有一个创建对象的函数:
abc = createObjectFromData(data),xyz = createObjectFromData(data)。
标签: javascript jquery