我想了解Math.max(timeLeft/1000,0);
将其最大值恢复为0
。我作为一个菜鸟做了很多研究。我阅读了关于数学及其所有方法的w3schools's教程。但是,返回0
的值真的让我感到困惑。完整的代码如下。
var start = document.getElementById("start");
var dis = document.getElementById("display");
var finishTime;
var timerLength = 10;
var timeoutID;
dis.innerHTML = "Time Left: " + timerLength;
if(localStorage.getItem('myTime')){
Update();
}
start.onclick = function () {
localStorage.setItem('myTime', ((new Date()).getTime() + timerLength * 1000));
if (timeoutID != undefined) window.clearTimeout(timeoutID);
Update();
}
function Update() {
finishTime = localStorage.getItem('myTime');
var timeLeft = (finishTime - new Date());
dis.innerHTML = "Time Left: " + Math.max(timeLeft/1000,0);
timeoutID = window.setTimeout(Update, 100);
}
为什么window.setTimeout(Update, 100);
在此代码中表现为setInterval
?
完整的工作代码为here
注意:我阅读了this article,并且我试图了解localstorage
如何使用date
函数。
另一个注意事项:上面的代码没有任何问题。它正在按预期工作。我只是想了解某段代码,这实在令人困惑。我现在明白为什么它会以0
返回。
答案 0 :(得分:3)
timeLeft
为负数,因此0为最大值。
答案 1 :(得分:1)
Math.max(timeLeft/1000, 0)
返回0。
window.setTimeout(Update, 100)
表现为setInterval
,就像setInterval
一样,它每100个循环调用一次。
答案 2 :(得分:1)
实际上Math.max
并不总是返回零,否则你总会看到" 0"在显示范围内。仅当new Date()
大于finishTime
时(timerLength * 1000
ms = 10 * 1000 ms = 10 s之后),它才返回零。
关于setTimeout
,考虑以下代码,f
调用setTimeout
,在1秒后调用f
,调用setTimeout
,依此类推:
function f () {
setTimeout(f, 1000);
}
结果类似于setInterval
但不完全相同。阅读以下文章,了解原因(作者:jQuery'父亲本人):http://ejohn.org/blog/how-javascript-timers-work/。
var start = document.getElementById("start");
var dis = document.getElementById("display");
var finishTime;
var timerLength = 10;
var timeoutID;
var fakeStorage = (new Date()).getTime() + timerLength * 1000;
dis.innerHTML = "Time Left: " + timerLength;
if(fakeStorage){
Update();
}
start.onclick = function () {
fakeStorage = ((new Date()).getTime() + timerLength * 1000);
if (timeoutID != undefined) window.clearTimeout(timeoutID);
Update();
}
function Update() {
finishTime = fakeStorage;
var timeLeft = (finishTime - new Date());
dis.innerHTML = "Time Left: " + Math.max(timeLeft/1000,0);
timeoutID = window.setTimeout(Update, 100);
}

<button type="button" id="start">start</button>
<span id="display"></span>
&#13;