ikemonn's blog

技術ネタをちょこちょこと

【Underscore.js】_.eachを読んだ

jashkenas/underscore_.eachを読んだ。

概要

第二引数で指定した関数に第一引数の配列やオブジェクトの各要素を引数として渡して、実行する。

var x = _.each([1,2,3], function(num){
    console.log(num);
});
// 1
// 2
// 3

 ソースコード

_.each = _.forEach = function(obj, iteratee, context) {
    iteratee = optimizeCb(iteratee, context);
    var i, length;
    if (isArrayLike(obj)) {
      for (i = 0, length = obj.length; i < length; i++) {
        iteratee(obj[i], i, obj);
      }
    } else {
      var keys = _.keys(obj);
      for (i = 0, length = keys.length; i < length; i++) {
        iteratee(obj[keys[i]], keys[i], obj);
      }
    }
    return obj;
  };

optimizeCbはcontextがundefinedで、iterateeが関数だとiterateeを返す。 一番上のサンプルコードだと、console.logをする無名関数を返す。

 参考

jashkenas/underscore

each() | Underscore JS 日本語リファレンス | Elderflower