在我的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);
答案 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);