下划线 _.delay 实现
underscore _.delay implementation
为什么延迟的第一个实现不起作用?
另外,第三个如何在不使用 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);
};
Why does the first implementation of delay not work?
因为 setTimeout(<strong>func(args)</strong>, wait);
调用 func
tion。现在。在将调用结果传递给 setTimeout
之前。但这确实需要稍后调用回调函数!
Also how does the 3rd one work without using Array.prototype.slice.call?
因为apply
does also accept arguments
objects直接,不只是数组。但是,我猜你真的想知道为什么
_.delay = function(func, wait, ...args) {
return setTimeout(func, wait, ...args); // using rest arguments
};
有效吗?因为这就是 setTimeout
处理多余参数的方式 1 - 它将它们传递给延迟的 func
调用。
1:在大多数实现中。旧的IE没有。
为什么延迟的第一个实现不起作用?
另外,第三个如何在不使用 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);
};
Why does the first implementation of delay not work?
因为 setTimeout(<strong>func(args)</strong>, wait);
调用 func
tion。现在。在将调用结果传递给 setTimeout
之前。但这确实需要稍后调用回调函数!
Also how does the 3rd one work without using Array.prototype.slice.call?
因为apply
does also accept arguments
objects直接,不只是数组。但是,我猜你真的想知道为什么
_.delay = function(func, wait, ...args) {
return setTimeout(func, wait, ...args); // using rest arguments
};
有效吗?因为这就是 setTimeout
处理多余参数的方式 1 - 它将它们传递给延迟的 func
调用。
1:在大多数实现中。旧的IE没有。