【问题标题】:Why is the object being iterated passed back through the callback?为什么被迭代的对象通过回调传回?
【发布时间】:2013-05-02 18:07:07
【问题描述】:

这是undescore.封装成函数的常用习语

_.each(obj1, function(val, key, context, obj2){
});

回调中第四个参数的用途是什么 - obj2。这是一个正在循环的对象,因此它应该始终在外部范围内可用,如obj1

是否有一个示例说明您需要通过obj2 访问obj1

我试图了解obj2 的用途。这是代码的确切行 - 第 83 行。

if (iterator.call(context, obj[i], i, obj) === breaker) return;

【问题讨论】:

  • 您可以轻松构建一个不在迭代器函数范围内的示例。

标签: javascript underscore.js


【解决方案1】:

如果您将命名函数的引用作为回调传递,obj1 可能不可用:

function my_callback(val, key, context, obj2) {
    ...
}

function do_stuff() {
    var obj1 = ...
    _.each(obj1, my_callback);
}

【讨论】:

  • (函数不需要命名)
【解决方案2】:

回调中第四个参数的用途是什么 - obj2。这是一个正在循环的对象,因此它应该始终在外部范围内可用,如obj1

这样您就可以重复使用相同的函数来循环多个对象,并且仍然可以访问在函数中被迭代的对象。您使用的功能很可能在其他地方定义。您可以拥有一个用于各种迭代目的的函数库。 很少想知道对象是什么(因此它在参数列表中很远),但有一些用例。

【讨论】:

    猜你喜欢
    • 2014-07-30
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 2017-11-11
    相关资源
    最近更新 更多