おかゆ++

IT業界の片隅で生き残るブログ

JavaScriptのapplyとcallの違い

まずはMDNから引用。

developer.mozilla.org

this の値と、個々にあたえた引数をわたして、関数を呼び出します。

NOTE: このメソッドは apply() メソッドに似ていますが、呼び出し先関数に渡す引数の指定方法が異なります。 apply() メソッドは、呼び出し先関数に渡す引数のリストを単一の配列として受けとります。

callとapplyはやっぱり似ているんですね。

developer.mozilla.org

apply() メソッドは与えられた this 参照値と、配列(もしくは配列風のオブジェクト)の形で与えられた引数を用いて関数を呼び出します。

NOTE: 関数の構文は call() メソッドとほぼ同じですが、根本的な違いは apply() メソッドが引数の配列を一つだけ受け取るのに対して、 call() メソッドは連続した引数のリストを受け取るという点です。

違いは引数の渡し方のみ

MDNにそのものズバリ答えが書いてありました。

callの時は、hoge.call(piyo, arg1, arg2) という風に引数を渡しますが、 applyでは hoge.apply(piyo, [arg1, arg2])と配列で引数を渡します。

そのほか、thisを指定できるところなんかはどちらも同じ。

配列のほうが取り回しができて便利なので、とりあえずapplyを覚えておけばいい気がしますが、 名前的にはcallのほうがしっくりきますね。

結論

好きなほうを使えばいいと思います。