LoginSignup
0
1

More than 3 years have passed since last update.

【JavaScript】bindと部分適用について学ぶ

Last updated at Posted at 2019-07-26

最近わからないことが芋づる状に出てきました。
カリー化?→部分適用?→バインド..?
一個一個勉強するしかないです、急がば回れです。

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や引数を指定することができる。

bind構文
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版がこちら。

bindの部分適用例javascript
function mul(a,b){
    return a * b;
}
let double = mul.bind(null,2);
console.log(double(3));
console.log(double(2));

スッキリして超みやすい!
bindによってaを先に定義していますね!

次回は本題のカリー化について調べたいと思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1