javascript - context 参数在 underscore.js 中有什么作用?

标签 javascript underscore.js

<分区>

Possible Duplicate:
underscore.js _.each(list, iterator, [context]) what is 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;
      }
    }
  }
};

context 参数是什么,如何使用?

最佳答案

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

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

JavaScript 的 .call.apply 方法让您调用一个函数,并将您正在调用的函数的 this 值设置为您提供的第一个参数。

如果我这样做...

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

...functhis 的值将是 {foo:"bar"} 对象。

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

关于javascript - context 参数在 underscore.js 中有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11836467/

相关文章:

jquery - 根据输入动态创建多个不同高度的<section>

javascript - 使用 Lodash 从集合中删除 "column"的最佳方法?

javascript - 是否可以让用户使用 javascript/php 或类似的东西修改 html 文件的元素?

javascript - Angular :如何在单元测试中模拟扩展类

javascript - 如何在 JavaScript 中检测 "different object types"? (数组与 Json 与日期等...)

backbone.js - 异步请求后未调用主干集合 : _.

javascript - 下划线和 Bootstrap 日期时间选择器

javascript - 如何解决错误: SyntaxError: Unexpected token import

javascript - 如何模拟 axios 类

javascript - 按属性名称数组过滤对象