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

第1引数「関数」に第2引数以降を引数として部分適用した関数を返す。

■使用例

var subtract = function( a, b ){
	return a - b;
}
var sub5 =  _.partial( subtract, 5 );
var subForm20 =  _.partial( subtract, _, 20 );

// re = -15;
var re = sub5( 20 );

// re2 = -15;
var re2 = subForm20( 5 );

■内部構造

  _.partial = function(func) {
 
// 第2引数以降の引数。
    var boundArgs = slice.call(arguments, 1);
    
// _.partial()に返される関数。
    var bound = function() {
      var position = 0, length = boundArgs.length;
      var args = Array(length);
      
// _.partial()の引数をargsに格納するforループ。boundArgs[i] の値で「_」だった時は arguments[position++];
      for (var i = 0; i < length; i++) {
      	
// arguments は bound()の引数。
        args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i];
      }
      
// bound()の引数をargsに追加するwhileループ。
      while (position < arguments.length) args.push(arguments[position++]);
      
// executeBound()に代入。
      return executeBound(func, bound, this, this, args);
    };
// bound() 定義終了。    
    
    return bound;
  };

このページのトップへ戻る