我一直在使用异步函数
我终于避开var _this = this;
并切换到实际使用call/apply
。但是,这样做时,
/* inside instantiated obj */
setTimeout(function(){
/* more code here */
}.apply(this), 0);
,没有启动错误,似乎工作。为什么?因为我最近注意到它是“错误的”,实际上应该是:
/* inside instantiated obj */
setTimeout(function(){
/* more code here */
}.bind(this), 0);
bind()方法创建一个新函数,当被调用时,它具有它 此关键字设置为提供的值,具有给定的序列 调用新函数时提供的任何参数。
答案 0 :(得分:3)
当您在函数对象上调用 但 由于超时设置为0, 您可以使用此示例更好地理解它。 你应该能够观察到apply
或call
方法时,会立即调用,只会将结果传递给setTimeout
。< / p>
bind
返回一个新的函数对象,并在超时结束后调用。setTimeout
s只等待0毫秒,因此您没有看到任何差异。console.log(new Date());
setTimeout(function () {
console.log("Apply", new Date());
}.apply(this), 3000);
setTimeout(function () {
console.log("Bind", new Date());
}.bind(this), 3000);
Bind
和其他两个之间3秒的差异。