質問: [1,2,6,3,10,2,5]; console.log(Math.max.apply(null, array)); //10 ``` 2点目。 第1引数にnullを渡しているのは、Math.max関数の中でthisを使う処理が無いからという解釈で合っていますか? 3点目。 applyによって第2引数の配列のarrayがMath.maxの引数に渡るとき、 [1,2,6,3,10,2,5]が(1,2,6,3,10,2,5)という引数に変換されて渡っているという認識で合っていますか? 4点目。 call関数でMath.maxを使う書き方を見たことないのですが、 もし書くとしたら、下記のようになると思いますが、 call関数使ってMath.max使うぐらいなら、普通にMath.max関数使った方がコードが短くなるから、 call関数でMath.maxを使う書き方はしないという認識で合っていますか? ``` console.log(Math.max.call(null, 1,2,6,3,10,2,5)); //10 console.log(Math.max(1,2,6,3,10,2,5)); //10 ```
回答: **1点目** 内部的にはわかりませんが、利用する上での挙動は同じです。 **2点目** はい、`Math.max()`はコンテクストに依存しないので、何でも大丈夫です。 実行される関数がストリクトモードでない場合に、第1引数に`null`または`undefined`を指定すると`this`はグローバルオブジェクトになります。 **3点目** はい、合っています。 **4点目** はい、そうです。 `Math.max()`を`Function.prototype.apply()`で呼び出すのは、配列を引数に渡せるからです。 `Function.prototype.call()`だとメリットがないですね。