underscoreに詳しくないので、勉強半分でソースコードを読む。
##利用するバージョン
underscore.js(v1.8.3)
##defaultsとは
こんな説明。
####_.defaults(object, *defaults)
Fill in undefined properties in object with the first value present in the following list of defaults objects.
var iceCream = {flavor: "chocolate"};
_.defaults(iceCream, {flavor: "vanilla", sprinkles: "lots"});
=> {flavor: "chocolate", sprinkles: "lots"}
defaults objectsに指定されている値で、オブジェクトのundefinedなプロパティを埋めます。
###underscore.defaults
コード的にはこのあたり。
// Fill in a given object with default properties.
_.defaults = createAssigner(_.allKeys, true);
createAssignerに_.allKeysとtrueを渡す。
createAssignerは_.extendで説明したとおり、objectを引数にとる関数で、_.allKeysの結果を用いて、obj[key] === void 0なところに値を埋める。