JavaScript中的setTimeout序列

时间:2017-10-01 17:41:04

标签: javascript function settimeout

有人可以解释一下,为什么我在JavaScript中创建一个函数并将其添加到setTimeoutsetTimeout无法正常工作,但如果我创建匿名函数,一切正常吗?示例如下:

有效:

setTimeout(function() {
    alert("foo");
}, 100);

它不起作用:

function foo() {
    alert('foo');
}
setTimeout(foo, 100);

2 个答案:

答案 0 :(得分:2)

我检查了你的代码,你正在setTimeout回调中访问snakeTail。当100 ms后执行回调函数时,变量snakeTail不再可用。你应该用

替换你的行
setTimeout(function(param){
    alert("Game over! Your score: "+(param-5)+" points. Wanna play again?");
    location.reload();
}, 100, snakeTail);

这样你可以保存snaketail变量并将其传递给setTimeout回调。

答案 1 :(得分:0)

Undersatanding setTimeout

没有区别,如何使用它,将匿名函数传递给setTimeout

setTimeout(function() {
    console.log("foo");
}, 1000);

或传递现有功能:

function foo() {
    console.log('foo');
}
setTimeout(foo, 1000);

setTimeout是一个异步,因此如果您将在常规console.log之前使用它,那么将会打印console.log之后的setTimeout函数首先,然后,console.logsetTimeout将在指定的延迟后打印(在这种情况下为1秒):

setTimeout(function() {
    console.log("bar");
}, 1000);
console.log("foo");

但是如果您想在1秒后记录"foo",然后在记录"bar"一秒后记录"foo",则可以添加 2秒延迟到第二个setTimeout,像这样:

setTimeout(function() {
    console.log("foo");
}, 1000);

function bar() {
    console.log('bar');
}
setTimeout(bar, 2000);

或者你也可以将一个setTimeout包裹到另一个{1}}中并给出1秒的延迟。在这种情况下,1秒后将打印"foo",2秒后将打印"bar"

setTimeout(function() {
    console.log("foo");
    setTimeout(bar, 1000);
}, 1000);

function bar() {
    console.log('bar');
}

希望这能让您基本了解setTimeout的工作原理。