Javascript—通过将name变量作为参数传递,对一系列类似函数进行因子分解

Javascript—通过将name变量作为参数传递,对一系列类似函数进行因子分解,javascript,Javascript,我有一系列计时器,我需要在我的应用程序的某些点重置。这里不存在计时器本身,它们是不同的,因此不需要分解,但重置它们的各种函数完全相同,只是要重置的计时器的名称不同 function resetMyFirstTimer() { if (window.myFirstTimer) { console.log("reset any potential prexisting myFirstTimer timer"); clearTimeout(window.myFirstT

我有一系列计时器,我需要在我的应用程序的某些点重置。这里不存在计时器本身,它们是不同的,因此不需要分解,但重置它们的各种函数完全相同,只是要重置的计时器的名称不同

function resetMyFirstTimer() {
    if (window.myFirstTimer) {
      console.log("reset any potential prexisting myFirstTimer timer");
      clearTimeout(window.myFirstTimer);
    }
  }
function resetMySecondTimer() {
    if (window.mySecondTimer) {
      console.log("reset any potential prexisting mySecondTimer timer");
      clearTimeout(window.mySecondTimer);
    }
  }
function resetMyThirdTimer() {
    if (window.myThirdTimer) {
      console.log("reset any potential prexisting myThirdTimer timer");
      clearTimeout(window.myThirdTimer);
    }
  }
function resetMyFourthTimer() {
    if (window.myFourthTimer) {
      console.log("reset any potential prexisting myFourthTimer timer");
      clearTimeout(window.myFourthTimer);
    }
  }
and so on...
我创建了一个函数来创建它们一次,然后使用此函数调用它们:

function resetTimer(timerName) {
    if (window.timerName) {
      console.log("reset any potential prexisting " + timerName + " timer");
      clearTimeout(window.timerName);
    }
  }
我的问题是如何称呼他们。这是行不通的。我想:

resetTimer(myFirstimer);
resetTimer(mySecondtimer);
resetTimer(myThirdimer);
resetTimer(myFourthTimer);
  • 如果我使用

    重置计时器(myFirstimer)

I get myFirstTimer未定义

  • 如果我使用
resetTimer(“myFirstimer”)
; 我已测试并警告(window.myFirstTimer)将发送未定义的

例如,我就是这样定义myFirstTimer的

window.myFirstTimer = setTimeout(showAlert, 10000);

function showAlert() {
//do stuff
}

那么如何为不同的计时器名称调用它们呢?

您可以使用括号表示法引用全局变量(窗口对象)。这里有一个例子

函数showVar(varName){
log(窗口[varName]);
}
window.someVar=“你好”//创建全局变量

showVar(“someVar”);//按名称引用全局变量
您可以使用括号表示法引用全局变量(窗口对象)。这里有一个例子

函数showVar(varName){
log(窗口[varName]);
}
window.someVar=“你好”//创建全局变量

showVar(“someVar”);//按名称引用全局var
FYI,如果变量是使用
let
const
声明的,这将不起作用。@Teemu谢谢。那是给Op的信息,不是我的。我知道;)“FOP'sI”可能是一个臭名昭著的初始化=)。我只是觉得在回答中提及可能会很好。无论如何,
window.variable
不依赖于声明,因此这在所有情况下都有效…@Teemu不,这是一个公平的观点,因此我向OP询问了更多信息。根据他们的反应,这个答案可能是100%错误的。我将根据它们返回的内容进行更新或删除。我今天添加了定义myFirstTimer的方法,因为这可能会影响答案。仅供参考,如果变量是使用
let
const
声明的,这将不起作用。@Teemu谢谢。那是给Op的信息,不是我的。我知道;)“FOP'sI”可能是一个臭名昭著的初始化=)。我只是觉得在回答中提及可能会很好。无论如何,
window.variable
不依赖于声明,因此这在所有情况下都有效…@Teemu不,这是一个公平的观点,因此我向OP询问了更多信息。根据他们的反应,这个答案可能是100%错误的。我将更新或删除,具体取决于它们返回的内容。我今天添加了定义myFirstTimer的方式,因为这可能确实会影响答案。您能告诉我们您如何定义有问题的变量吗?当然会立即添加到问题上您能告诉我们如何定义有问题的变量吗?当然会立即添加到问题上