为什么延迟的第一次实现不起作用?
另外,如果不使用Array.prototype.slice.call,第三个如何工作?
_.delay = function(func, wait) {
var args = Array.prototype.slice.call(arguments, 2);
return setTimeout(func(args), wait);
};
_.delay = function(func, wait) {
var args = Array.prototype.slice.call(arguments, 2);
return setTimeout(function() { return func.apply(this, args); }, wait);
};
_.delay = function(func, wait) {
return setTimeout.apply(this, arguments);
};
答案 0 :(得分:2)
为什么延迟的第一次实现不起作用?
因为setTimeout(func(args), wait);
调用func
。马上。在将调用结果传递给setTimeout
之前。但是这确实要求稍后调用回调函数!
另外,如果不使用Array.prototype.slice.call,第三个如何工作?
因为apply
也直接接受arguments
objects,不仅仅是数组。但是,我猜你真的想知道为什么
_.delay = function(func, wait, ...args) {
return setTimeout(func, wait, ...args); // using rest arguments
};
的作品?因为这就是setTimeout
如何处理多余的参数 1 - 它将它们传递给延迟的func
调用。
1:在大多数实现中。老IE没有。