使用一个函数在JavaScript中分配多个全局变量

时间:2013-07-16 20:57:44

标签: javascript

我一直在寻找一段时间,似乎找不到解决这个问题的方法。

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

并将对象分配给全局。

现在,我意识到不建议使用全局变量,我理解由于变量提升,传递给函数的参数是本地范围的。但是,我需要能够在分配后在其他函数中访问这些全局变量。

我的问题是如何传递全局变量并将它们分配到上面的一个函数中,而不必创建单独的函数来明确地分配每个变量(顺便说一下,但会产生大量的代码冗余)?

3 个答案:

答案 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);