2013-07-16 3 views
1

Я некоторое время искал вокруг и не мог найти решение этого вопроса.Назначение нескольких глобальных переменных в 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); 

и назначить объект глобального.

Теперь я понимаю, что использование глобальных переменных не рекомендуется, и я понимаю, что из-за переменной подъема аргументы, переданные функции, локально ограничены. Тем не менее, мне нужно иметь доступ к этим глобальным переменным в других функциях после их назначения.

Мой вопрос в том, как передать глобальные переменные и назначить их в одну функцию выше, без необходимости создавать отдельные функции, чтобы назначать каждую из них явно (что работает, но создает много избыточности кода)?

+0

Проверить этот вопрос только в том случае, http://stackoverflow.com/questions/14220321/how-to- return-the-response-from-a-ajax-call – elclanrs

+0

Глобалы отличные, и использование одной функции, которую вы можете вызывать много раз, чтобы установить множество глобальных переменных, считается хорошей практикой. – adeneo

+0

Глобальные переменные не должны использоваться слишком сильно. Он считается анти-образным. Глобальные переменные создают государственное программное обеспечение make make очень тесно и трудно отлаживать. – user1759572

ответ

4

глобальные переменные являются фактически членами window объекта. Таким образом, вы можете сделать:

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

getBackList(x, 'GLOBAL_VARIABLE_ONE'); 
+0

16 секунд слишком медленно :-P – Neal

+0

LOL Я вижу это;) – jods

+0

да, а работы другого парня, как показано ... – dandavis

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

Pass во имя глобальной переменной вместо ^^^

+0

Спасибо за быстрый ответ, я проголосовал за это. – dnak

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); 
+0

Спасибо, мне действительно нравится этот ответ. – dnak

+1

Это чище, чем передача строк для имен переменных –

Смежные вопросы