【问题标题】:Why are these two JavaScript Date objects not the same?为什么这两个 JavaScript Date 对象不一样?
【发布时间】:2011-03-01 05:01:52
【问题描述】:

我是一名初学者,正在阅读有关 JavaScript 中日期的教程,它提供了这个示例来比较两个事件之间的时间。

我真的不明白为什么 firstDate 和 var secondDate 不会是完全相同的时间? var secondDate 中的新 Date 对象是否仅在触发 doEvent 时才占用时间,而 firstDate 使用 window.onload 时才占用时间?

另外,为什么变量 firstDate 没有“var”标签,而变量 secondDate 有?这只是作者的一个错字,还是在某些方面很重要?

var firstDate;
window.onload=startTimer;

function startTimer(){
 firstDate = new Date();
 document.getElementById("date").onclick=doEvent;
}

function doEvent() {
 var secondDate = new Date();
 alert((secondDate - firstDate) / 1000);
}

【问题讨论】:

  • 当然,var secondDate 中的 new Date 对象只会在 doEvent 被触发时才花费时间,因为在另一个方法之后编写一个方法不会执行它,而是在它绑定到的事件上执行。

标签: javascript


【解决方案1】:

你的猜测完全正确。 firstDatewindow.load事件触发的时间,secondDate是id为date的元素被点击的时间。


在回复:您的编辑中,varfirstDate 一起使用 - 它超出了startTimer 的范围。这不是错字。 firstDate 需要在 startTimerdoEvent 函数的范围之外定义,以便它在 doEvent 函数内部具有有意义的值。

阅读JavaScript scoping 可能对您有用。

【讨论】:

  • 好的,谢谢。你能回答我刚刚添加到 OP 的第二个问题,即为什么 firstDate 没有 var 标签而 secondDate 有?
  • 谢谢。为什么不需要在函数范围之外定义 var secondDate?
  • @mjmitche:因为它不需要在doEvent之外使用。
  • 谢谢,所以如果 firstDate 只在 startTimer 中定义,它会在那个函数中起作用,但在 doEvent 中不起作用?感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-04
相关资源
最近更新 更多