我一直在寻找一段时间,似乎找不到解决这个问题的方法。
我在JavaScript中声明了三个全局变量,这些变量尚未分配,例如:
var GLOBAL_VARIABLE_ONE;
var GLOBAL_VARIALLE_TWO;
var GLOBAL_VARIABLE_THREE;
假设我有一个函数,我传递了两个参数,其中一个是url字符串,用于调用ajax调用JSON对象,另一个是全局变量,我想将返回的JSON分配给。因此,我有这样的功能:
function getBackList(urlName, globalVariable) {
$.ajax({
type: "GET",
url: urlName,
}).done(function (returned_data) {
globalVariable = $.parseJSON(returned_data);
});
}
我希望能够像下面这样调用函数:
getBackList("\some\url", GLOBAL_VARIABLE_ONE);
并将对象分配给全局。
现在,我意识到不建议使用全局变量,我理解由于变量提升,传递给函数的参数是本地范围的。但是,我需要能够在分配后在其他函数中访问这些全局变量。
我的问题是如何传递全局变量并将它们分配到上面的一个函数中,而不必创建单独的函数来明确地分配每个变量(顺便说一下,但会产生大量的代码冗余)?
答案 0 :(得分:4)
function getBackList(urlName, globalVariableName) {
$.ajax({
type: "GET",
url: urlName,
}).done(function (returned_data) {
window[globalVariableName] = $.parseJSON(returned_data);
});
}
传递全局变量的名称而不是^^^
答案 1 :(得分:4)
全局变量实际上是window
对象的成员。所以你可以这样做:
function getBackList(x, variableName) {
// .. stuff ..
window[variableName] = $.parseJSON(returned_data);
}
getBackList(x, 'GLOBAL_VARIABLE_ONE');
答案 2 :(得分:3)
Javascript不会允许它传递变量。
如果GLOBAL_VARIABLE_ONE
是一个对象,它将传递一个引用。
示例:
a = {}
a
现在引用了新对象。
b = a;
b
现在引用与引用相同的对象。请注意,它不会引用a
。
使用a = {}; b = a
,即可获得
a
\
\
{ }
/
/
b
然后使用a['one'] = {}
获得
a
\
\
{ one: { } }
/
/
b
为了达到你想要的效果,你需要GLOBAL_VARIABLE_ONE
成为一个对象。
所以你可以这样做:
var GLOBAL_OBJECT = {};
getBackList("\some\url", GLOBAL_OBJECT['GLOBAL_VARIABLE_ONE']);
或者你可以这样做:
var GLOBAL_VARIABLE_ONE = {}
var GLOBAL_VARIALLE_TWO = {}
var GLOBAL_VARIABLE_THREE = {}
function getBackList(urlName, globalVariable) {
$.ajax({
type: "GET",
url: urlName,
}).done(function (returned_data) {
globalVariable.json = $.parseJSON(returned_data);
});
}
getBackList("\some\url", GLOBAL_VARIABLE_ONE);