最近わからないことが芋づる状に出てきました。
カリー化?→部分適用?→バインド..?
一個一個勉強するしかないです、急がば回れです。
this
に関する振る舞いはわかる前提で進みます。
この辺がthisの参考にいいかも。
https://qiita.com/takeharu/items/9935ce476a17d6258e27
##bindって?
参考サイト:https://techacademy.jp/magazine/14652
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
bind
・・・thisや引数を指定することができる。
?
function.bind(thsiArg[,arg1[arg2[, ...]]]
thisArg
・・・ターゲット関数にthis引数として渡される値。
arg
・・・ターゲット関数を呼び出すとき、バインドされた関数に与えられる引数の前に付けてターゲット関数に渡す引数。
ぼんやりとしかわからんです。実例をみてみましょう。
function greeting(){ //上で言うところのターゲット関数
console.log(this + 'world');
}
var hello = greeting.bind('hello '); //上で言うところのバインドされた関数
hello();
結果はhello world
です。
greetingのthis
を華麗にhello
に変えています。
function sum(x, y, z){
return x + y + z;
}
var test = sum.bind(null, 10, 20, 30);
console.log(test());
this
に何も渡さないときはnull
を渡します。
x=10,y=20,z=30にバインドしているので、結果は60になります。
上の例のhelloもtestも関数として実行されているので、
bind
は戻り値として新しい関数を生み出しているようですね。
##bind利用の行先
・thisを束縛できる!
これについては今回知りたいことじゃないのですっ飛ばします。
https://www.deep-rain.com/programming/javascript/807
この辺がわかりやすかった。
・部分適用が簡単にかける!
https://qiita.com/hosomichi/items/e11ad0c4ea79db2dee84
https://ja.javascript.info/currying-partials
まずは部分適用が何かを知らないといけないです。
function greeting(x,y){
if(typeof y === 'undefined'){
return function(y){
return console.log(x+y);
};
}
}
let test = greeting('こんにちは');
test('太郎');
結果はこんにちは太郎
です。
yに指定がなかった場合、という書き方でxだけを先に代入することができています。
このように、部分的に引数を定義することを部分適用と言うみたいです。
そしてbind
版がこちら。
function mul(a,b){
return a * b;
}
let double = mul.bind(null,2);
console.log(double(3));
console.log(double(2));
スッキリして超みやすい!
bind
によってaを先に定義していますね!
次回は本題のカリー化について調べたいと思います。