为什么Underscore.js有延迟功能?

时间:2013-06-03 04:44:15

标签: javascript underscore.js settimeout

这是Underscore.js'delay函数的源代码:

_.delay = function (func, wait) {
    var args = slice.call(arguments, 2);
    return setTimeout(function () { return func.apply(null, args); }, wait);
};

这与setTimeout有什么不同?为什么Underscore.js需要delay

4 个答案:

答案 0 :(得分:22)

这是一种跨浏览器的方式,能够传递额外的参数,这些参数将作为回调的参数出现,如setTimeout()。这在IE中不起作用。

它可以让你的代码更漂亮......

setTimeout(_.bind(function() { }, null, "arg1"), 1e3);

... ... VS

_.delay(function() { }, 1e3, "arg1");

我同意它是不太有用的Underscore方法之一,Naomi's answer中概述了这些方法。

答案 1 :(得分:14)

  

为什么Underscore.js有延迟功能?

因为愚蠢。这个特殊的underscore.js方法看起来很愚蠢。

<强>缺点

  1. lib中的附加功能意味着更大的代码库
  2. 更大的代码库意味着更多的维护和更多可能的错误
  3. 使用此函数的代码现在依赖于该库
  4. 对本机API的改进较小/零意味着低成本:增益率
  5. 新api学习
  6. <强>赞成

      

    本节特意留空


    我只是学习使用javascript并执行类似

    的操作
    var hello = function() {
      console.log("hello");
    };
    
    var delay = 1000;
    
    window.setTimeout(hello, delay);
    

    简单,对吧? Underscore.js有时候很无用。老实说,window.setTimeout就像它一样非常有用。


    这是另一个展示如何将arg传递给函数

    的示例
    var Cat = function(name) {
      function meow(message) {
        console.log(name, "says meow!", message);
      }
      this.meow = meow;
    };
    
    var duchess = new Cat("Duchess");
    
    window.setTimeout(duchess.meow.bind(duchess, "please feed me!"), 2000);
    
    // 2 seconds later
    // => Duchess says meow! please feed me!
    

    如果你不能依赖.bind,你也可以使用封闭

    window.setTimeout(function() {
      duchess.meow("please feed me!");
    }, 1000);
    
    哇,这很难。我要回到下划线,Lodash和jquery。这个JavaScript的东西很难!

答案 2 :(得分:9)

AES·泰德·芯片

该图书馆的作者,选择利用他/她的业余时间来开源,谈论它,用它作为一种方式向人们介绍javascript,也许让某人有一个灯泡时刻关闭范围以为图书馆的吸引力因此得到了提升。

孤立地争论这个功能的相关性就像争论绘画或其他工艺的相关性。有些人可能喜欢它,有些人可能不喜欢。

你可以自由喜欢或不喜欢。我个人而言,更喜欢刚刚进入点的库。

_.delay, _.defer, _.throttle, _.after有一个流程恕我直言,比窗口读得更好。

除此之外,通常我也喜欢编写节点服务器端(nodejs)而不必转换/进/出模式...尝试在节点中使用window.timeout并查看会发生什么。

答案 3 :(得分:4)

并不多,虽然它与deferdebounce等主题相符。这意味着您可以使用下划线包装符号:

_(yourfunction).delay(1000);

此外,它似乎不会让你逃脱一个字符串参数,它将调用eval。