0

我已经环顾四周,似乎无法找到解决这个问题的方法。

我在 JavaScript 中声明了三个尚未分配的全局变量,例如:

var GLOBAL_VARIABLE_ONE;
var GLOBAL_VARIALLE_TWO;
var GLOBAL_VARIABLE_THREE;

假设我有一个函数,我传递了两个参数,其中一个是用于进行 ajax 调用以检索 JSON 对象的 url 字符串,另一个是我想要将返回的 JSON 分配给的全局变量。因此,我有这样的功能:

function getBackList(urlName, globalVariable) {
    $.ajax({
    type: "GET",
    url: urlName,
    }).done(function (returned_data) {
        globalVariable = $.parseJSON(returned_data);
    });
}

我希望能够像这样调用函数:

getBackList("\some\url", GLOBAL_VARIABLE_ONE);

并将对象分配给全局。

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

我的问题是如何传递全局变量并将它们分配给上面的一个函数,而不必创建单独的函数来显式分配每个函数(顺便说一下,这会产生很多代码冗余)?

4

3 回答 3

4
function getBackList(urlName, globalVariableName) {
    $.ajax({
       type: "GET",
       url: urlName,
    }).done(function (returned_data) {
        window[globalVariableName] = $.parseJSON(returned_data);
    });
}

改为传入全局变量的名称^^^

于 2013-07-16T20:59:54.203 回答
4

全局变量实际上是window对象的成员。所以你可以这样做:

function getBackList(x, variableName) {
  // .. stuff ..
  window[variableName] = $.parseJSON(returned_data);
}

getBackList(x, 'GLOBAL_VARIABLE_ONE');
于 2013-07-16T21:00:10.060 回答
3

Javascript 不允许这样做,因为它正在传递变量。

如果GLOBAL_VARIABLE_ONE是一个对象,它将传递一个引用。

例子:

a = {}

a现在引用新对象。

b = a;

b现在引用与 a 引用的相同对象。请注意,它不引用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);
于 2013-07-16T21:04:10.827 回答