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

时间:2014-05-02 16:05:06

标签: javascript

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

但是我要注意确保最好的方法是什么。我正在考虑一个全局变量,但考虑到第二个函数中所需的变量是第一个函数执行的时间,我不确定它是如何工作的。

这是我的代码:

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不会进入第二个功能。这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:1)

你在这里发生了一些事情:

  1. 对于初学者,您使用相同的Date对象来衡量每个函数的开始时间。这个问题是Date对象代表一个固定状态,即实例化它的确切时刻。因此,对getMilliseconds()的两次单独调用将返回相同的值,无论何时调用它们
  2. 您的两个功能是试图访问彼此'局部变量,我确定你知道,除非将它们作为参数传递给对方,否则是不可能的。
  3. 您在实际运行myFunction之前正在重新定义myFunction(A)。这是因为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 } } 。我建议你分别命名每个功能,然后进行测试。
  4. 作为替代方案,考虑重命名您的函数并使用外部范围保持两次并在事后计算差异:

    {{1}}

答案 1 :(得分:0)

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

var d = new Date(); 

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

现在可以访问d.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
    }
}