x未定义,setTimeout问题

时间:2010-09-23 15:53:10

标签: javascript settimeout

使用以下代码我收到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);
});

3 个答案:

答案 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);
});

除非出于某种原因需要稍后通过名称引用该功能......?