3

重複の可能性:
underscore.js _.each(list、iterator、[context])コンテキストとは何ですか?

したがって、underscore.jsのこのforEach関数のコンテキストでは:

// The cornerstone, an `each` implementation, aka `forEach`.
// Handles objects with the built-in `forEach`, arrays, and raw objects.
// Delegates to **ECMAScript 5**'s native `forEach` if available.
var each = _.each = _.forEach = function(obj, iterator, context) {
  if (obj == null) return;
  if (nativeForEach && obj.forEach === nativeForEach) {
    obj.forEach(iterator, context);
  } else if (obj.length === +obj.length) {
    for (var i = 0, l = obj.length; i < l; i++) {
      if (i in obj && iterator.call(context, obj[i], i, obj) === breaker) return;
    }
  } else {
    for (var key in obj) {
      if (_.has(obj, key)) {
        if (iterator.call(context, obj[key], key, obj) === breaker) return;
      }
    }
  }
};

パラメータコンテキストとは何ですか?どのように使用されますか?

4

1 に答える 1

4

渡されたイテレータ関数のthis(呼び出しコンテキスト)を設定します。

iterator.call(context, obj[i], i, obj);
      //         ^---right here

JavaScript.call.applyメソッドを使用すると、呼び出している関数のthis値を指定した最初の引数に設定して関数を呼び出すことができます。

だから私がそうするなら...

var obj = {foo:"bar"};
func.call(obj);

... thisinsideの値がオブジェクトfuncになり{foo:"bar"}ます。

したがって、その引数を指定すると、アンダースコアは、.call上記のように渡した関数を呼び出すときの最初の引数としてそれを使用します。

于 2012-08-06T21:52:22.787 に答える