Javascript 调用函数的setInterval存在问题

Javascript 调用函数的setInterval存在问题,javascript,jquery,Javascript,Jquery,我试图让一个简单的脚本工作,但在某个地方我一定做了一些错误,因为它不工作!我只想设置一个调用函数的时间间隔。我需要一些帮助。也许不是最好的解决办法,但我对这一点还不熟悉 $(document).ready(function() { startInterval(); // activate timer function startInterval() { var t = setInterval("autoSave", 20000); } function autoSave() { alert

我试图让一个简单的脚本工作,但在某个地方我一定做了一些错误,因为它不工作!我只想设置一个调用函数的时间间隔。我需要一些帮助。也许不是最好的解决办法,但我对这一点还不熟悉

$(document).ready(function() {

startInterval(); // activate timer

function startInterval() {
var t = setInterval("autoSave", 20000);
}

function autoSave() {
alert("test");
}

});
删除“”,并使其成为对函数的引用

function startInterval() {
  var t = setInterval(autoSave, 20000);
  //                  ^now you have a reference to
  //                   autoSave and setInterval knows
  //                   what to execute
}
删除“”,并使其成为对函数的引用

function startInterval() {
  var t = setInterval(autoSave, 20000);
  //                  ^now you have a reference to
  //                   autoSave and setInterval knows
  //                   what to execute
}

这两种方法中的任何一种都有效,但不是你所拥有的

// Pass the real function
function startInterval() {
  var t = setInterval(autoSave, 20000);
}

// THIS MAY NOT WORK
// eval
function startInterval() {
  var t = setInterval("autoSave()", 20000);
}
//

// Anonymous function
function startInterval() {
  var t = setInterval(function() { autoSave(); }, 20000);
}

推理是这样的:如果你直接传递一个函数,它会调用它。但是,如果您传递一个字符串,它将在超时结束时传递给
eval
它,这将在您的情况下返回一个函数,在我的第二种情况下返回已计算的函数(请注意括号)

其中任何一个都可以工作,但不是您拥有的函数

// Pass the real function
function startInterval() {
  var t = setInterval(autoSave, 20000);
}

// THIS MAY NOT WORK
// eval
function startInterval() {
  var t = setInterval("autoSave()", 20000);
}
//

// Anonymous function
function startInterval() {
  var t = setInterval(function() { autoSave(); }, 20000);
}
推理是这样的:如果你直接传递一个函数,它会调用它。但是,如果您传递一个字符串,它将在超时结束时传递给
eval
它-在您的例子中,它返回一个函数,在我的第二个例子中返回已计算的函数(请注意括号)

1)更好的做法是将t-global设置为全局,否则它将无法在startInterval()函数之外访问。但你需要它来清除间隔

i、 e.申报var t;函数startInterval()之前

2) 考虑:
t=setInterval('autoSave()',20000)

1)更好的做法是将t-global设置为全局,否则它将无法在startInterval()函数之外访问。但你需要它来清除间隔

i、 e.申报var t;函数startInterval()之前


2) 考虑:
t=setInterval('autoSave()',20000)

Hmmm,我从一开始就有括号,现在我把它们放回去了,但它仍然不起作用!?嗯,非常有趣,我认为在过去的几个月里有些变化,因为第二种方法在所有浏览器中都适用。无论如何,第一种方法是更好的实践。还有,第三个选项见我的更新答案。嗯,我从一开始就有括号,现在我把它们放回去了,但它仍然不起作用!?嗯,非常有趣,我认为在过去的几个月里有些变化,因为第二种方法在所有浏览器中都适用。无论如何,第一种方法是更好的实践。另外,关于第三个选项,请参见我的更新答案。还请注意,如果您决定将参数传递给函数
autoSave
,则要创建一个匿名函数,如下所示:
var t=setInterval(function(){autoSave(param1,param2)},20000)
还请注意,如果您决定将参数传递给函数
autoSave
,则要创建这样一个匿名函数:
var t=setInterval(function(){autoSave(param1,param2)},20000)