Javascript 未捕获引用错误:未定义XXX

Javascript 未捕获引用错误:未定义XXX,javascript,html,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=(h

我用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);
}
window.onload=函数runMiniClock()
{
变量时间=新日期();
var hours=time.getHours();
var minutes=time.getMinutes();
分钟=((分钟<10)?“0”:“)+分钟;
ampm=(小时数>=12)?“下午”:“上午”;
小时=(小时>12)?小时-12:小时;
小时=(小时==0)?12:小时;
变量时钟=小时+1+“:“+分钟+”+ampm;
if(clock!=document.getElementById('clock').innerHTML)
document.getElementById('clock').innerHTML=clock;
定时器=设置超时(“runMiniClock()”,1000);
setInterval(函数(){
document.getElementById(“clock”).innerHTML=(新日期()).toLocaleTimeString();
}, 1000);
}
此代码工作正常,但当我打开控制台时,会看到一条错误消息:

未捕获引用错误:未定义runMiniClock

为什么会显示错误消息


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

但是,要传递给
setTimeout
eval
-字符串将在全局范围内进行计算,在全局范围内它找不到要调用的函数。无论如何,您应该始终将函数而不是字符串传递给

您可以使用

timer = setTimeout(runMiniClock, 1000);
另外,请注意,您有两个不同的函数将
#clock
innerHTML
设置为不同的值,您只需要其中一个。您缺少了一些,例如
ampm
timer


()

说实话,我没有花太多时间研究这个问题。但不管怎么说,没有setTimeout调用,你的时钟似乎运行正常

我用这把小提琴把它拿了出来

时钟仍在运行并适当增加

你确定需要吗

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);
var time=新日期();
var hours=time.getHours();
var minutes=time.getMinutes();
分钟=((分钟<10)?“0”:“)+分钟;
ampm=(小时数>=12)?“PM”:“AM”;
小时数=(小时数>12)?小时-12:小时;
小时数=(小时数==0)?12小时;
变量时钟=小时+1+“:“+分钟+”+ampm;
if(clock!=document.getElementById('clock').innerHTML)document.getElementById('clock').innerHTML=clock;
setInterval(函数(){
document.getElementById(“clock”).innerHTML=(新日期()).toLocaleTimeString();
}, 1000);

…因为您的演示中没有名为
runMiniClock
的函数?请尝试单独定义该函数,然后使用行
窗口。onload=runMiniClock()
only?@AaronD:不是这样的,不是。@Juhana第一个JSFIDLE和平的代码是window.onload=function runMiniClock(){但我没有写它,因为JSFIDLE会将代码转换为window!