我试图获取第二个函数内函数执行时的时间差。
但是我注意到最好的方法是什么。我正在考虑使用全局变量,但是考虑到第二个函数中所需的变量是第一个函数执行的时间,我不确定它是如何工作的。
这是我的代码:
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
不会传递到第二个函数。最好的方法是什么?
最佳答案
这里发生了一些事情:
- 对于初学者,您将使用相同的
Date
对象来测量每个函数的开始时间。问题是Date
对象代表一个固定状态,即它被实例化的确切时刻。因此,对getMilliseconds()
的两次单独调用将返回相同的值,无论何时调用它们 - 您的两个函数正在尝试访问彼此的局部变量,我相信您知道这是不可能的,除非它们将它们作为参数相互传递。
- 在实际运行
myFunction(A)
之前,您正在重新定义myFunction
。这是因为 JavaScript 命名函数声明被提升(连同它们的定义)到封闭上下文的顶部,这意味着myFunction(A)
的功能将在您有机会调用任一函数之前,始终将其替换为myFunction(B)
的函数。我建议您单独命名每个函数,然后进行测试。- 有关函数提升的更多信息,请查看以下精彩摘要:Variable and Function hoisting
作为替代方案,请考虑重命名函数并使用外部作用域来保存两个时间并在事后计算差异:
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
}
}
关于JavaScript:跨多个函数携带时间变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23432404/