我试图在第二个函数内部获取函数执行时间的时间差。
但是我要注意确保最好的方法是什么。我正在考虑一个全局变量,但考虑到第二个函数中所需的变量是第一个函数执行的时间,我不确定它是如何工作的。
这是我的代码:
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
不会进入第二个功能。这样做的最佳方式是什么?
答案 0 :(得分:1)
你在这里发生了一些事情:
Date
对象来衡量每个函数的开始时间。这个问题是Date
对象代表一个固定状态,即实例化它的确切时刻。因此,对getMilliseconds()
的两次单独调用将返回相同的值,无论何时调用它们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
}
}
。我建议你分别命名每个功能,然后进行测试。
作为替代方案,考虑重命名您的函数并使用外部范围保持两次并在事后计算差异:
{{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
}
}