在函数之间共享Javascript变量

时间:2015-05-28 21:54:44

标签: javascript random scope

所以我需要在两个独立的函数中使用一些变量。 第一个函数主要使用变量来计算然后显示某些东西(一个共轭动词)。第二个函数使用变量来查看用户的答案是否正确,并相应地更改了一些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);

我不能将它们声明为函数外的全局变量,因为每次调用第一个函数时都需要重新计算它们。我无法在自己的函数中声明它们并在原始的两个函数中调用它们,因为这两个函数都需要相同的值。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

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

function $() {
    console.log('hi');
}

$()
$

如果他们来自不相关的地方,我会建议使用个人参数(如评论中@jfriend00所建议)并且这样做:

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

如果您想使字段列表有些动态,您可以使function doSomethingWith(tense, person, number, voice) { // do some things } doSomethingWithSections(getTense(), getPerson(), getNumber(), getVoice()); 数据驱动如下:

getRandomSections

答案 1 :(得分:0)

你不能做这样的事 -

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