Javascript SetInterval不能正常等待?

时间:2014-02-20 06:26:00

标签: javascript

在我的javascript中我有:

$(document).ready(function ()
{
    setInterval(test('test alert'), 10000);
});

function test(value)
{
    alert(value);
}

简单,当文件准备就绪时,应该设置setInterval ...这基本上意味着,等待10秒,运行该功能,然后每10秒重复一次。

问题是setInterval未正确激活。测试功能立即被触发(而不是等待10秒),并且永远不会再次触发。我在这里做错了什么?

现在,如果我按如下方式设置我的setInterval,它可以正常工作......但为什么呢?

setInterval(function() { test('test alert'); }, 10000);

2 个答案:

答案 0 :(得分:2)

那是因为你传递了调用函数返回值,而不是函数本身。你想要的是这个:

setInterval(test, 10000);

如果需要将参数传递给测试,则必须将其包装在另一个函数中:

setInterval(function(){test('test alert');}, 10000);

每当你使用一个文字后跟括号(如test()test('test alert'))时,括号是一个向调用函数的JavaScript的信号。为了自己测试,在浏览器的交互式控制台中尝试以下操作:

console.log('test: ' + test);
console.log('test(): ' + test());

第一个会告诉你该值是函数;第二个会告诉你undefined;那是因为函数(test)已经被调用,并且返回了值。

请注意,在JavaScript中,函数是一等公民,因此创建一个本身返回函数的函数没有错:

function test(value) {
    return function(){
        alert(value);
    }
}

如果您这样做,您的setInterval将按照您原先预期的那样工作:

// test('test alert') returns a function
setInterval(test('test alert'), 10000);

答案 1 :(得分:1)

setInterval() 需要函数 eval() - 字符串作为其第一个参数。在您的代码中,您传递函数test()

的返回值

相反它应该是:

setInterval(function() {
    test('test alert');
}, 10000);