在函数之间共享Javascript变量

在函数之间共享Javascript变量,javascript,random,scope,Javascript,Random,Scope,所以我有几个变量需要在两个单独的函数中使用。 第一个函数基本上使用变量来计算并显示某些内容(一个变位动词)。第二个函数使用变量查看用户的答案是否正确,并相应地更改一些HTML样式 但是,这些变量是随机计算的,如下所示: function randomIntFromInterval(min,max) { return Math.floor(Math.random()*(max-min+1)+min); } var tense = randomIntFromInterval(1, 6); var

所以我有几个变量需要在两个单独的函数中使用。 第一个函数基本上使用变量来计算并显示某些内容(一个变位动词)。第二个函数使用变量查看用户的答案是否正确,并相应地更改一些HTML样式

但是,这些变量是随机计算的,如下所示:

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);
我不能将它们声明为函数外部的全局变量,因为每次调用第一个函数时都需要重新计算它们。我不能在自己的函数中声明它们,也不能在原来的两个函数中调用它们,因为这两个函数都需要相同的值


我怎么能这样做?

你不能这样做吗-

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();

我想你是在问如何在两个函数之间传递一个值结构。你(可能)不想做的是单独传递每一个,尽管如果你只有几个,并且它们来自不同的来源,这是一个选项。如果它们来自相同或类似的源,则可以使用具有命名键的对象,如:

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
如果它们来自不相关的地方,我建议使用单独的参数(如@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);

调用另一个函数时,将它们作为参数传递给另一个函数。或者,使它们成为对象的属性,并将对象作为参数传递。这就是函数参数的作用。不幸的是,没有,因为我需要函数彼此独立运行,但是谢谢你的回答!不幸的是,这些都不起作用。我有两个独立的函数,需要从这些随机变量中获得相同的值。我需要计算一次随机值,然后将这些值用于两个函数。除非我遗漏了什么,否则您的解决方案似乎只适用于将数据从一个函数传递到另一个函数。@FirstQuestion-如果您有一个关联的元素,比如question元素,您可以使用来存储与该问题相关的值。@FirstQuestion已编辑以显示如何进行此操作。一旦变量中有了值,它就非常简单了。@JaredFarrish在大多数情况下都过于复杂,而且常常不合适(你不想在元素上存储任何复杂的数据)。@ssube谢谢,这更清楚了。但是有没有一种方法可以单独运行这些函数呢?我希望将函数附加到两个单独的HTML按钮上。