有人可以解释一下,为什么我在JavaScript中创建一个函数并将其添加到setTimeout
,setTimeout
无法正常工作,但如果我创建匿名函数,一切正常吗?示例如下:
有效:
setTimeout(function() {
alert("foo");
}, 100);
它不起作用:
function foo() {
alert('foo');
}
setTimeout(foo, 100);
答案 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)
setTimeout
没有区别,如何使用它,将匿名函数传递给setTimeout
:
setTimeout(function() {
console.log("foo");
}, 1000);
或传递现有功能:
function foo() {
console.log('foo');
}
setTimeout(foo, 1000);
setTimeout
是一个异步,因此如果您将在常规console.log
之前使用它,那么将会打印console.log
之后的setTimeout
函数首先,然后,console.log
内setTimeout
将在指定的延迟后打印(在这种情况下为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
的工作原理。