我试图理解为什么此代码段立即记录字符串{"'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);
函数无法执行的原因是什么?
该问题已被标记为重复。但是我不认为这是相同的。这个问题使用的是通话,但引用的不是。
答案 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)
。