簡體   English   中英

在函數之間共享Javascript變量

[英]Sharing Javascript variables between function

所以我需要在兩個獨立的函數中使用一些變量。 第一個函數主要使用變量來計算然后顯示某些東西(一個共軛動詞)。 第二個函數使用變量來查看用戶的答案是否正確,並相應地更改一些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 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);

不能這樣做 -

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM