我用JavaScript制作了一个简单的数字时钟:
window.onload = function runMiniClock()
{
var time = new Date();
var hours = time.getHours();
var minutes = time.getMinutes();
minutes=((minutes < 10) ? "0" : "") + minutes;
ampm = (hours >= 12) ? "PM" : "AM";
hours=(hours > 12) ? hours-12 : hours;
hours=(hours == 0) ? 12 : hours;
var clock = hours + 1 + ":" + minutes + " " + ampm;
if(clock != document.getElementById('clock').innerHTML)
document.getElementById('clock').innerHTML = clock;
timer = setTimeout("runMiniClock()",1000);
setInterval(function(){
document.getElementById("clock").innerHTML = (new Date()).toLocaleTimeString();
}, 1000);
}
Run Code Online (Sandbox Code Playgroud)
这段代码完美无缺,但是当我打开控制台时,我看到一条错误消息:
未捕获的ReferenceError:未定义runMiniClock
为什么会显示错误消息?
因为runMiniClock它不是全局函数,所以它是您分配给的函数表达式的本地名称window.onload.
这eval-STRING要传递到setTimeout然而,在全球范围内,它并没有找到函数被调用评估.无论如何,你应该总是将函数而不是字符串传递给setTimeout.
您可以使用以解决此问题
timer = setTimeout(runMiniClock, 1000);
Run Code Online (Sandbox Code Playgroud)
此外,请注意您有两个不同的功能设置innerHTML的#clock不同的价值观,你会希望只是其中之一.并且你缺少一些变量声明,for ampm和timer.
(更新演示)