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

标签 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不会传递到第二个函数。最好的方法是什么?

最佳答案

这里发生了一些事情:

  1. 对于初学者,您将使用相同的 Date 对象来测量每个函数的开始时间。问题是 Date 对象代表一个固定状态,即它被实例化的确切时刻。因此,对 getMilliseconds() 的两次单独调用将返回相同的值,无论何时调用它们
  2. 您的两个函数正在尝试访问彼此的局部变量,我相信您知道这是不可能的,除非它们将它们作为参数相互传递。
  3. 在实际运行 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
  }
}

关于JavaScript:跨多个函数携带时间变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23432404/

相关文章:

javascript - 将用作内联样式的函数附加到 componentWillMount

javascript - Laravel Blade 中基于属性值的条件语句

javascript - 将对象数组转换为字符串数组

javascript - jquery 脚本不改变 div 的类

JavaScript 方法参数合理化

javascript - "forceSelection:true"不允许清除字段

javascript - 当我需要 "express"时,我需要知道它是对象还是函数

JavaScript 对象作为函数的参数

javascript - React Native 慢加载组件

javascript - 如何使用 JavaScript 在 HTML 中随机更改背景颜色?