5

配列の最大値を取得するように言われたら、次のようにします。

var nums = [66,3,8,213,965,1,453];
Math.max.apply(Math, nums);

もちろん、次のこともできます: nums.sort(function(a, b){ return a - b}.pop(nums.length);

しかし、私は正直でなければなりません。.apply(Math,nums) を使用して、なぜそれが機能するのかを知る必要があります。私がこれをやった場合:

Math.max(nums);

それはうまくいきません。

apply を使用して、Math を this として渡し、配列には nums を渡します。しかし、前者が機能し、後者が機能しない「なぜ」の複雑さを知りたいです。どんな魔法が起きている?

私が頭を悩ませていない基本的なことがあります。「電話して申し込む」についてたくさん読んだことがありますが、多くの場合、上記のようなクールなトリックがいくつかあり、ここでもっと深い何かが欠けているように感じます.

4

1 に答える 1

7

ここでFunction.prototype.applyについて読むことができるように、指定された値と引数として関数をapply呼び出します。したがって、関数の 2 番目のパラメーターは を受け入れます。これが機能する理由です。thisarrayapplyarrays

Math.max ()自体は、配列ではなく、任意の数のパラメーターを想定しています。

Math.max(66,3,8,213,965,1,453) //will work
Math.max([66,3,8,213,965,1,453]) //will not work

通常apply、パラメーターの数がわからない動的パラメーター (ユーザー生成など) を使用して関数を呼び出すために使用します。一方、固定数のパラメーターがある場合は、それらを簡単にMath.max()機能させることができます。

于 2013-08-31T09:01:53.023 に答える