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

6
我将尝试实现的是:最初数据将被加载,然后使用相同的函数每十分钟进行更新。
考虑以下代码:
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个回答

15

您需要使用:

setInterval(updateNamespace.update, 600000);

(请注意,已删除了调用()运算符。)

按照您编写的方式,当您调用setInterval时,实际上会调用updateNamespace.update。 因此,

setInterval(updateNamespace.update(), 600000);

等于

setInterval(undefined, 600000);
您希望将函数的引用传递给 setInterval,而不是将函数的调用结果传递给它。

很好的答案!在我的情况下,我必须向由setInterval调用的函数发送参数。然后,我将它们放在更大的范围内(不是全局思考)。它像魅力一样工作! - Michael A.

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

-5

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

注意函数调用周围的引号


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接