【问题标题】:setTimeout() executing function immediately without delay [duplicate]setTimeout() 立即无延迟地执行函数[重复]
【发布时间】:2018-07-05 18:57:09
【问题描述】:

我试图理解为什么这个 sn-p 代码会立即记录字符串 '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);

是什么导致 setTimeout 函数在等待参数后不执行?

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

【问题讨论】:

  • 您正在立即调用该方法并尝试安排函数调用的 result 的执行。你认为call(...) 做了什么?
  • setTimeout 想要一个函数引用,call 立即调用该函数。

标签: javascript this settimeout


【解决方案1】:

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) 将被调用。

【讨论】:

    猜你喜欢
    • 2019-12-05
    • 2020-08-22
    • 2018-09-17
    • 2015-02-22
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多