如何从下划线.forEach调用中提取函数?

时间:2013-11-30 17:06:21

标签: underscore.js

通常我会写一个像这样的.forEach:

_.forEach(results, function(result){
    console.log(result);
});

如果我想提取该方法,我可以这样做:

  logIt: function(result){
    console.log(result);
}

_.forEach(results, logIt);

有没有办法提取函数并仍传入参数?例如,如果我的函数是这样的:

_.forEach(results, function(result){
   if(log){
       console.log(result);
   }
});

我怎样才能将结果和日志变量都传递给函数?

2 个答案:

答案 0 :(得分:1)

function logIt2(log){

    return function(result){
        if(log){
           console.log(result);
        }
    }
}

_.forEach( results, logIt2(logger) );

答案 1 :(得分:1)

您可以使用_.bind进行部分申请:

  

绑定 _.bind(function, object, [*arguments])

     

函数绑定到对象,这意味着无论何时调用该函数,其值都将是对象。 (可选)将参数传递给函数以预先填充它们,也称为部分应用程序

所以你可以这样说:

f = function(x, y) { ... };
g = _(f).bind(null, 11);

使g(6)f(11, 6)的行为相同。

所以,如果你有这个:

var obj = {
    logIt: function(log, result) {
        if(log)
            console.log(result);
    }
};
然后你可以说:

_.forEach(result, _.bind(obj.logIt, null, whatever_log_should_be));

在迭代期间将whatever_log_should_be作为log参数传递。如果您需要this内的特定logIt,请使用该值代替null

_.bind(obj.logIt, obj, ...)

演示:http://jsfiddle.net/ambiguous/zBvuJ/