未捕获的ReferenceError:未定义XXX

时间:2015-02-15 16:07:09

标签: javascript html

我用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);
}

此代码完美无缺,但是当我打开控制台时,我看到一条错误消息:

  

未捕获的ReferenceError:未定义runMiniClock

为什么会显示错误消息?

Here is the demo

2 个答案:

答案 0 :(得分:5)

因为runMiniClock不是全局函数,所以它是您分配给window.onload的函数表达式的本地名称。

但是,eval - 传递给setTimeout的字符串在全局范围内进行评估,在该范围内找不到要调用的函数。无论如何,你应该总是将函数而不是字符串传递给setTimeout

您可以使用

解决此问题
timer = setTimeout(runMiniClock, 1000);

另外,请注意,您有两个不同的功能,将innerHTML #clock设置为不同的值,您只需要其中一个。而且,ampmtimer错过了一些variable declarations

updated demo

答案 1 :(得分:0)

说实话,我并没有花太多时间研究这个问题。但是你的时钟似乎没有那个setTimeout调用就好了?

我在这个js小提琴中把它拿出来

http://jsfiddle.net/o35arzre/5/

并且时钟仍然运行并适当增加。

你确定需要吗?

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;
setInterval(function(){
document.getElementById("clock").innerHTML = (new Date()).toLocaleTimeString();
}, 1000);