setTimeout()立即执行函数而没有延迟

时间:2018-07-05 18:57:10

标签: javascript this settimeout

我试图理解为什么此代码段立即记录字符串{"'a':'10'":ObjectIdentifier('n'), "'b':'20'":ObjectIdentifier('n+1'), "'c':'30'":ObjectIdentifier('n+2')}而不等待预期的时间。

'Bob says hi'

在等待参数之后,var name = "Window"; var alice = { name: "Alice", sayHi: function() { console.log(this.name + " says hi"); } }; var bob = { name: "Bob" }; setTimeout(alice.sayHi.call(bob), 1000); 函数无法执行的原因是什么?

该问题已被标记为重复。但是我不认为这是相同的。这个问题使用的是通话,但引用的不是。

1 个答案:

答案 0 :(得分:2)

setTimeout将函数作为第一个参数,alice.sayHi.call(bob)不是函数,它是undefined(它是函数的返回值,而不是实际函数)。

因此,您需要指定一个回调,然后将函数包装在另一个函数中,如下所示:

var name = "Window";
var alice = {
  name: "Alice",
  sayHi: function() {
    console.log(this.name + " says hi");
  }
};
var bob = { name: "Bob" };

setTimeout(() => {
  alice.sayHi.call(bob)
}, 1000);

在上面的代码中(使用arrow function syntax),我给setTimeout函数() => { alice.sayHi.call(bob) }。在1秒之后,该函数将被执行,即将调用alice.sayHi.call(bob)