Javascript 下划线\延迟执行

Javascript 下划线\延迟执行,javascript,delay,Javascript,Delay,为什么第一次实施拖延不起作用 另外,第三个在不使用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 = A

为什么第一次实施拖延不起作用

另外,第三个在不使用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);
  };
为什么第一次实施拖延不起作用

因为设置超时(func(args),等待)调用
函数。马上在将调用结果传递到
setTimeout
之前。但这确实需要回调函数稍后调用

另外,第三个在不使用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);
  };
因为它也直接接受,而不仅仅是数组。然而,我猜你真的想知道为什么

_.delay = function(func, wait, ...args) {
    return setTimeout(func, wait, ...args); // using rest arguments
};
工作?因为这就是处理多余参数1的方法-它将它们传递给延迟的
func
调用


1:在大多数实现中。老IE不行。

第四个:
.delay=setTimeout
:-)哎呀,实际上第三个和第四个都不行:
错了。您需要使用
.apply(窗口,参数)
\uu0.delay=setTimeout.bind(窗口)