context参数在underscore.js中做什么

What does the context parameter do in underscore.js?

本文关键字:什么 js underscore 参数 context      更新时间:2023-09-26

可能重复:
underscore.js.each(list,迭代器,[context])什么是上下文?

因此,在undercore.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;
      }
    }
  }
};

参数上下文是什么?它是如何使用的?

设置传递的迭代器函数的this(调用上下文)

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

JavaScript的.call.apply方法允许您调用一个函数,其中所调用函数的this值设置为您提供的第一个参数。

所以如果我这样做…

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

CCD_ 6内部的CCD_ 5的值将是CCD_。

因此,如果您提供了该参数,下划线在调用如上所述传递的函数时会将其用作.call的第一个参数。