javascript setTimeout不按我的意料行事

时间:2012-02-29 16:40:57

标签: javascript settimeout

function myfunction()
  {
  window.setTimeout(alert('I waited for you.'),700000000);
  }

我打电话给这样的功能,我立即得到警告说“我等你了”。

我最初把7000作为第二个参数,但是如果它是除了秒之外的东西,它还是继续推动它。我显然希望函数能够做其他事情,但我把它分解为这个简单的例子来向我自己证明问题所在。

我的错误是什么?

6 个答案:

答案 0 :(得分:3)

你必须传递一个函数引用,而不是像这样执行alert()的结果:

function myfunction() {
    window.setTimeout(function() {alert('I waited for you.')},700000000);
}

当您将alert('I waited for you.')传递给setTimeout()时,您告诉javascript解释程序执行alert('I waited for you.'),然后将返回结果传递给setTimeout()。由于这会立即执行alert()语句并且警报不会返回setTimeout()使用的函数,这显然不是您想要的。

相反,您希望将函数引用传递给setTimeout()。这可以使用匿名函数完成,如上面提供的示例,也可以使用单独的命名函数完成,如下所示:

function myAlert() {
    alert('I waited for you.');
}

function myfunction() {
    window.setTimeout(myAlert, 700000000);
}

注意:对于更高级的用法,只要该函数返回setTimeout()稍后可以调用的函数引用,您实际上可以将立即执行的函数传递给setTimeout()。但是,这显然不是您在alert()

尝试使用的用法

答案 1 :(得分:2)

试试这个

function myfunction() {
  window.setTimeout( function(){alert('I waited for you.');}, 700000000);
}

在您的代码中,立即调用函数警报。如果你想稍后执行,你应该传递对函数的引用而不是函数调用setTimeout

答案 2 :(得分:2)

你应该做

function makeAlert(){
  alert('I waited for you.')
}

window.setTimeout(makeAlert,700000000);

否则立即执行alert()

答案 3 :(得分:2)

将其包装在匿名函数中:

function myfunction(){
    window.setTimeout(function(){alert('I waited for you.')},700000000);
}

这是一个 example jsFiddle (更容易管理的3秒延迟)。

答案 4 :(得分:-1)

您可以简单地将alert('I waited for you.')包裹在引号"中:

function myfunction() 
  { 
  window.setTimeout("alert('I waited for you.')",7000); 
  } 

数字是等待的毫秒数,因此7000是7秒。

请参阅http://jsfiddle.net/Ac5Xf/

答案 5 :(得分:-2)

我发现如果我在第一个参数周围加上引号,它就可以了。这就是我实际做的事情:

function divhide()
  {
  window.setTimeout("realhide()",7000);
  }

function realhide(){
  var mydiv = document.getElementById("mydiv");
  mydiv.style.display="none";
  mydiv.innerHTML="";
}