0

私はしばらくの間見回してきましたが、この質問に対する解決策を見つけることができないようです.

次のように、まだ割り当てられていない JavaScript で宣言された 3 つのグローバル変数があります。

var GLOBAL_VARIABLE_ONE;
var GLOBAL_VARIALLE_TWO;
var GLOBAL_VARIABLE_THREE;

2 つのパラメーターを渡す関数があるとします。そのうちの 1 つは JSON オブジェクトを取得するための ajax 呼び出しを行うための URL 文字列であり、もう 1 つは返された JSON を割り当てるグローバル変数です。したがって、私はそのような機能を持っています:

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

次のような関数を呼び出せるようにしたい:

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

オブジェクトをグローバルに割り当てます。

ここで、グローバル変数の使用は推奨されないことに気付きました。また、変数の巻き上げにより、関数に渡される引数がローカルにスコープされていることも理解しています。ただし、これらのグローバル変数が割り当てられた後、他の関数でこれらのグローバル変数にアクセスできる必要があります。

私の質問は、グローバル変数を渡して上記の 1 つの関数に割り当てるにはどうすればよいかということです。個別の関数を作成してそれぞれを明示的に割り当てる必要はありません (ちなみにこれは機能しますが、多くのコードの冗長性が生じます)。

4

3 に答える 3

4

グローバル変数は、実際にはwindowオブジェクトのメンバーです。したがって、次のことができます。

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

getBackList(x, 'GLOBAL_VARIABLE_ONE');
于 2013-07-16T21:00:10.060 に答える
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 に答える
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);
于 2013-07-16T21:04:10.827 に答える