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

Aad*_*hah 16 javascript settimeout underscore.js

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

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

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

ale*_*lex 23

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

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

setTimeout(_.bind(function() { }, null, "arg1"), 1e3);
Run Code Online (Sandbox Code Playgroud)

... ... VS

_.delay(function() { }, 1e3, "arg1");
Run Code Online (Sandbox Code Playgroud)

我同意这是一个不太有用的Underscore方法,这些方法在Naomi的回答中有所概述.


Tha*_*you 14

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

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

缺点

  1. lib中的附加功能意味着更大的代码库
  2. 更大的代码库意味着更多的维护和更多可能的错误
  3. 现在使用此函数的代码依赖于该lib
  4. 比原生API更小/更少的改进意味着低成本:增益比
  5. 新的apis学习

优点

本节故意留空


我只是学习使用javascript并做类似的事情

var hello = function() {
  console.log("hello");
};

var delay = 1000;

window.setTimeout(hello, delay);
Run Code Online (Sandbox Code Playgroud)

简单吧?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!
Run Code Online (Sandbox Code Playgroud)

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

window.setTimeout(function() {
  duchess.meow("please feed me!");
}, 1000);
Run Code Online (Sandbox Code Playgroud)

哇,这很难.我要回到下划线,Lodash和jquery.这个JavaScript的东西很难!

  • 我理解你的方法,但是一旦你开始使用通用库,你很快就会发现自己包装了所有内容,以免暴露底层API(例如jQuery将所有内容包装在阳光下).否则,用户开始对什么是库以及什么是本机JS或DOM或者你正在抽象的东西感到困惑.只是说,不支持一种方法而不是另一种方法. (5认同)
  • 一堆新手还在投票.让他们来,新手:) (3认同)
  • @RobG我不同意.我认为lib的目标不应该是完全替换语言的所有本机功能.即使它是一个实用程序库,它也应该清楚地关注它实际上正在改进的事情.在这种情况下,`_.delay`不足以改进(或完全改进)以保证抽象和额外的API记忆. (3认同)

小智 10

美学

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

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

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

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

最重要的是,我通常也喜欢编写节点服务器端(nodejs)而不必切换/进/出模式...尝试window.timeout在节点中使用,看看会发生什么.