为什么迭代的对象通过回调传回?

时间:2013-05-02 18:07:08

标签: javascript underscore.js

这是undescore.

封装到函数中的常用习语
_.each(obj1, function(val, key, context, obj2){
});

回调中第四个参数的目的是什么 - obj2。这是循环的对象,因此它应始终在外部作用域obj1中可用。

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

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

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

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:1)

  

回调中第四个参数的目的是什么 - obj2。这是循环的对象,因此它应始终在外部作用域obj1中可用。

因此,您可以重复使用相同的函数来循环遍历多个对象,并且仍然可以访问在函数内迭代的对象。您使用的功能可能在其他地方定义。您可以拥有一个函数库,用于各种迭代目的。想要了解对象是什么(罕见(因此它到目前为止参数列表中),但是有用例。