2015-05-28 4 views
1

Итак, у меня есть несколько переменных, которые мне нужно использовать в двух отдельных функциях. Первая функция по существу использует переменные для вычисления, а затем отображает что-то (сопряженный глагол). Вторая функция использует переменные для проверки правильности ответов пользователя и соответственно изменения стиля HTML.Обмен переменными Javascript между функцией

Однако эти переменные вычисляются случайным образом, например:

function randomIntFromInterval(min,max) { 
return Math.floor(Math.random()*(max-min+1)+min); } 

var tense = randomIntFromInterval(1, 6); 
var person = randomIntFromInterval(1, 3); 
var number = randomIntFromInterval(1, 2); 
var voice = randomIntFromInterval(1, 2); 

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

Как я могу это сделать?

+4

Передайте их в другую функцию как при вызове другой функции. Или, сделайте им свойства объекта и передайте объект в качестве аргумента. Это аргументы функции. – jfriend00

ответ

0

Cant вы сделать что-то вроде this-

function randomIntFromInterval(min,max) { 
    return Math.floor(Math.random()*(max-min+1)+min); 
} 

function f1(t, p, n, v){ //arguments for function 
    //something 
} 
function f2(t, p, n, v){ 
    //something 
} 

function main(){ 
    var tense = randomIntFromInterval(1, 6); 
    var person = randomIntFromInterval(1, 3); 
    var number = randomIntFromInterval(1, 2); 
    var voice = randomIntFromInterval(1, 2); 

    f1(tense, person, number, voice); 
    f2(tense, person, number, voice); 
} 

main(); 
+0

К сожалению, нет, поскольку мне нужны функции для работы независимо друг от друга, но спасибо за ответ! – TheFirstQuestion

3

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

function randomIntFromInterval(min,max) { 
    return Math.floor(Math.random()*(max-min+1)+min); 
} 

function getRandomSections() { 
    return { 
    tense: randomIntFromInterval(1, 6), 
    person: randomIntFromInterval(1, 3), 
    number: randomIntFromInterval(1, 2), 
    voice: randomIntFromInterval(1, 2) 
    }; 
} 

function doSomethingWithSections(sections) { 
    // do some things 
} 

function doSomethingElseWithSections(sections) { 
    // do some things 
} 

// Put it all together 
var sections = getRandomSections(); 
doSomethingWithSections(sections); 
doSomethingElseWithSections(sections); // using the same values in a second function 

Если они пришли из несвязанных места, я предложил бы использовать отдельный Params (как это было предложено @ jfriend00 в комментарии) и делает:

function doSomethingWith(tense, person, number, voice) { 
    // do some things 
} 

doSomethingWithSections(getTense(), getPerson(), getNumber(), getVoice()); 

Если вы хотите, чтобы сделать список полей несколько динамический, вы можете сделать getRandomSections управляемые данными, как:

function getSections(names, cb) { 
    var obj = {}; 
    names.forEach(function (name) { 
    obj[name] = cb(x, y); 
    }); 
    return obj; 
} 

// Used as 
getSections(['tense', 'person', 'number', 'voice'], randomIntFromInterval); 
+0

К сожалению, они не работают. У меня есть две отдельные функции, которые должны получать одни и те же значения из этих случайных величин. Мне нужно рассчитать случайные значения один раз, затем эти значения доступны для двух функций. Если я чего-то не хватает, ваши решения, похоже, работают только для передачи данных из одной функции в другую функцию. – TheFirstQuestion

+0

@TheFirstQuestion. Если у вас есть связанный элемент, например элемент вопроса, вы можете использовать [element.dataset] (https://hacks.mozilla.org/2012/10/using-data-attributes-in-javascript- и-css /), чтобы сохранить эти значения в связи с вопросом. –

+0

@TheFirstQuestion отредактирован, чтобы показать, как вы это сделаете. Это супер просто, как только у вас есть значения в переменной. – ssube

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