为什么我们不能在setTimeout上使用call和apply方法?
var obj={}
window.setTimeout.call(obj,callback,delay);//it throws error stating illegal invocation
为什么我们不能在setTimeout上使用call和apply方法?
var obj={}
window.setTimeout.call(obj,callback,delay);//it throws error stating illegal invocation
在 setTimeout
上使用 .call
没有意义,因为 .call
是用来调用函数并在调用时提供上下文的。换句话说,你不是想要为 setTimeout 提供上下文来调用它,而是想要为回调函数callback 提供上下文。
要在 setTimeout
中实现这一点,可以使用 .bind,例如:
var obj={};
window.setTimeout(callback.bind(obj),delay);
setTimeout.call(window, callback, delay);