[英]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.