17

delayこれは、Underscore.js の関数のソース コードです。

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

これは とどう違うのsetTimeoutですか? Underscore.js が必要なのはなぜdelayですか?

4

4 に答える 4

24

これは、setTimeout(). これは IE では機能しません。

コードをよりきれいにすることができます...

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

...対...

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

Naomi's answerで概説されている、あまり役に立たない Underscore メソッドの 1 つであることに同意します。

于 2013-06-03T04:58:42.940 に答える
17

Underscore.js に遅延機能があるのはなぜですか?

ばかだから。この特定の underscore.js メソッドはかなりばかげているようです。

短所

  1. libの追加機能は、より大きなコードベースを意味します
  2. コードベースが大きいほど、維持する必要があり、バグの可能性が高くなります
  3. この関数を使用するコードは、そのライブラリに依存するようになりました
  4. ネイティブ API より少ない/ゼロの改善は、低コスト: ゲイン比を意味します
  5. 学ぶべき新しいAPI

長所

このセクションは意図的に空白のままにしました


私はjavascriptの使い方を学び、次のようなことをするだけです

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

var delay = 1000;

window.setTimeout(hello, delay);

シンプルですね。Underscore.js は、まったく役に立たない場合があります。正直なところ、window.setTimeoutそのままで十分に役に立ちます。


関数に引数を渡す方法を示す別の例を次に示します。

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 は大変です。

于 2013-06-03T05:32:58.107 に答える
10

美学

そのライブラリの作成者は、余暇を使ってそれをオープン ソース化し、それについて話し、人々に JavaScript を紹介し、おそらく誰かにクロージャ スコープについて電球の瞬間を持たせる方法として使用することにしました。これがあることで図書館の魅力が増しました。

この機能の関連性を単独で議論することは、絵画やその他の職人技の関連性を議論するようなものです. 好きな人もいれば、嫌いな人もいます。

好きか嫌いかは自由です。私は、個人的には、要点をつかむだけのライブラリを好みます。

_.delay, _.defer, _.throttle, _.afterウィンドウよりも読みやすいフローIMHOがあります。

これに加えて、一般的に、ノードサーバー側 (nodejs) を作成することも好きで、モードをシフト/イン/アウトする必要はありません...window.timeoutノードで使用して、何が起こるかを確認してください。

于 2015-07-10T23:29:25.940 に答える