在JavaScript中使用setInterval而不使用内联的匿名函数

时间:2012-02-07 05:51:34

标签: javascript

我想要实现的是,最初将加载数据,然后使用相同的功能每十分钟更新一次。

考虑以下代码:

var updateNamespace = (function() {
    var object = '#updates',
    load = 'loader';

    return {
        update: function() {
            $(object).addClass(load).load('update.php', function(reponse, status, xhr) {
                if (status == 'error') {
                    $(this).html('<li>Sorry but there was an error in loading the news &amp; updates.</li>');
                }
                $(this).removeClass(load);
            }); 
        }
    }
})();

setInterval(updateNamespace.update(), 600000);

我收到此错误:

useless setInterval call (missing quotes around argument?)

我该如何解决这个问题?

写这个或使用setInterval函数有什么更好,更优雅的方式?

感谢。

3 个答案:

答案 0 :(得分:14)

您需要使用:

setInterval(updateNamespace.update, 600000);

(注意删除的invocation()运算符。)

您编写的代码在调用setInterval时实际上会调用updateNamespace.update。因此,

setInterval(updateNamespace.update(), 600000);

评估为

setInterval(undefined, 600000);

您希望将setInterval参考传递给您的函数,而不是其调用的结果。

答案 1 :(得分:0)

出于某种原因,JavaScript希望在您的调用方法周围看到引号。好像它是一个字符串。不知道为什么它会这样。 Matt H.说如果你传递一个可以解决问题的引用。但如果您需要传递参数,它将无法工作。所以我不知道JavaScript可能只是将方法保存为字符串,然后在使用时转换回正常状态。

答案 2 :(得分:-6)

尝试setInterval('updateNamespace.update()', 600000);

注意函数调用的引号