2016-04-19 12 views
4

とES6矢印関数fは(doSomethingの例は、であることができるのsetTimeout)を期待F</p> <pre><code>function f() { ... } </code></pre> <p>を考慮しないパラメータ

function dosomething(callback) { ...; callback() } 

ような関数

呼び出しを期待別の関数のdoSomething dosomethingとfを渡すと、違いがあります:

dosomething(f); 

dosomething(() => f()); 

好ましいこれらのオプションのいずれかでありますか?

+0

だから、これらのケースでこれは異なるでしょうか? – kofifus

+0

[はい。](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions)。矢印関数は自分自身の 'this'を導入しません –

+0

はい、しかし、矢印関数はf()を呼び出すので、これはどちらの場合も同じです。 – kofifus

答えて

4

ラッピング機能(2番目の例)が矢印機能であるかどうかは、ここでは変更されません。

しかし、このラッピング関数は、引数の転送を禁止するのに便利です。最初のケースでは、引数でcallbackが呼び出されると、fに与えられます。 2番目のケースではありません。代わりに、送信された引数の数を制限することができます:dosomething((a, b) => f(a, b));

またthis注入から保護するために使用することができる:最初のケースで、doSomethingbindfそのthiscallback.bind(whatever))を変更します。ラッピング機能(矢印または非表示)を使用すると、何も影響はなく、(グローバルコンテキスト)はdoSomethingとなります。f

+2

別の区別:アリティ制御。特定の数の引数(この場合は0)を必要とするコールバック関数を渡している可能性がありますが、コールバックを渡す関数を停止させるものは何もありません。ラッパー関数は、余分な引数が実際のコールバックに通らないことを意味します。この動作の簡単な例については、 '[1,2,3,4,5] .forEach(console.log)の出力を' [1,2,3,4,5]の出力と比較してください。 forEach((n)=> console.log(n)) 'を実行します。 –

+0

ありがとう、私は私の答えを編集しました。 –

関連する問題