使用以下代码我收到clock is not defined
错误,为什么?
$(function(){
function clock() {
var nd = new Date();
var h, m, s;
h = nd.getHours();
m = nd.getMinutes();
s = nd.getSeconds();
if (h <= 9) h = "0" + h;
if (m <= 9) m = "0" + m;
if (s <= 9) s = "0" + s;
$('#digital-clock .hour').text(h+':');
$('#digital-clock .min').text(m+':');
$('#digital-clock .sec').text(s);
}
setTimeout('clock()', 1000);
});
答案 0 :(得分:9)
因为当您将字符串传递给setTimeout
时,其中的代码将在超时时间在全局范围内执行。全局范围内的代码无法访问您致电setTimeout
时出现的任何本地变量。
不要将字符串传递给setTimeout
,它总是很糟糕(它基本上是一个延迟eval
,我们都讨厌eval
呃?)。而是使用Function
对象:
setTimeout(clock, 1000);
您也可以使用内联函数表达式来创建函数,例如:
setTimeout(function() {
var nd= new Date();
...
}, 1000);
答案 1 :(得分:6)
试试这个:
$(function(){
function clock() {
var nd = new Date();
var h, m, s;
h = nd.getHours();
m = nd.getMinutes();
s = nd.getSeconds();
if (h <= 9) h = "0" + h;
if (m <= 9) m = "0" + m;
if (s <= 9) s = "0" + s;
$('#digital-clock .hour').text(h+':');
$('#digital-clock .min').text(m+':');
$('#digital-clock .sec').text(s);
}
setTimeout(clock, 1000);
});
答案 2 :(得分:0)
这有什么问题?
$(function(){
setTimeout(function() {
var nd = new Date();
var h, m, s;
h = nd.getHours();
m = nd.getMinutes();
s = nd.getSeconds();
if (h <= 9) h = "0" + h;
if (m <= 9) m = "0" + m;
if (s <= 9) s = "0" + s;
$('#digital-clock .hour').text(h+':');
$('#digital-clock .min').text(m+':');
$('#digital-clock .sec').text(s);
}, 1000);
});
除非出于某种原因需要稍后通过名称引用该功能......?