JavaScript:在多个函数中携带时间变量

JavaScript: Carrying Time Variable Across Multiple Functions

本文关键字:时间 变量 函数 JavaScript      更新时间:2023-09-26

我试图获得一个函数在第二个函数内执行时的时间时间差。

然而,我不知道做这件事的最好方法是什么。我正在考虑一个全局变量,但是我不确定这将如何工作,考虑到第二个函数所需的变量是第一个函数执行的时间。

下面是我的代码:

var d = new Date(); 
function myFunction(A) {
   // execute function A
   var functionAExecuted = d.getMilliseconds();
}
function myFunction(B) {
   // Execute function B
   var functionBExecuted = d.getMilliseconds();
   var diff = functionAExecuted - functionBExecuted;
   if (diff > 3000) {
   //do something
   }

}

它不会执行,因为functionAExecuted不会进位到第二个函数。最好的方法是什么?

这里有两件事要做:

  1. 对于初学者,您使用相同的Date对象来测量每个函数的启动时间。这样做的问题是,Date对象表示固定状态,即它被实例化时的确切时刻。因此,无论何时调用
  2. ,对getMilliseconds()的两次单独调用将返回相同的值。
  3. 你的两个函数都试图访问彼此的局部变量,我相信你知道,这是不可能的,除非他们传递给对方作为参数。
  4. 在实际运行myFunction(A)之前,您正在重新定义myFunction。这是由于JavaScript命名函数声明被提升(连同它们的定义)到封闭上下文的顶部,这意味着myFunction(A)的功能总是在您有机会调用任何一个函数之前被myFunction(B)的功能所取代。我建议您分别命名每个功能,然后,然后进行测试。
    • 关于函数提升的更多信息,请查看这个优秀的摘要:变量和函数提升

作为一种替代方法,可以考虑重命名函数,并使用外部作用域保存两个时间,并在事后计算其差值:

var times = {};
function myFunctionA(a) {
  times.functionA = new Date();
  // do something
}
function myFunctionB(b) {
  times.functionB = new Date();
  var diff = times.functionB.getMilliseconds() - times.functionA.getMilliseconds();
  if (diff > 3000) {
    //do something else
  }
}

我将第一个值存储在一个表单中,然后在第二个函数中检索它:

var d = new Date(); 
function myFunction(A) {
   var functionAExecuted = d.getMilliseconds();
   // do something
   document.forms.myForm.timeStorageFunctionA.value = functionAExecuted;
}

现在d.t getmilliseconds()是可访问的:

function myFunction(B) {
    var functionBExecuted = new Date().getMilliseconds();
    var functionAExecuted = document.forms.myForm.timeStorageFunctionA.value;
    var diff = functionAExecuted - functionBExecuted;
    if (diff > 3000) {
        //do something else
    }
}