1

Eloquent JavaScript を読んでいて、関数型プログラミング (第 6 章)にたどり着きました。次の例に混乱しています。

show(Math.min.apply(null, [5, 6]));

function negate(func) {
  return function() {
    return !func.apply(null, arguments);
  };
}

*注意: show() は、Eloquent JavaScript Web サイトのコンソールに出力を出力するだけです。

negate() 関数が show() 内のコードにどのように関連しているかわかりません。negate() 関数はどこで呼び出されますか? その例のどこにも使用されていないように見えますか、それとも間違っていますか?

4

2 に答える 2

4

与えられたコードには2 つの例が含まれています。すべての関数にはapplyメソッドがあります。最初の例では、Math.minのメソッドを使用して、引数 list を指定applyして呼び出しています。2 番目の例は、 が次のように定義されている前の例とは対照的に表示する必要があります。Math.min[5,6]negate

function negate(func) {
  return function(x) {
    return !func(x);
  };
}

その例では、その単一の引数で呼び出し、結果を否定し、それを返す、1 つの引数negate(func)の新しい関数を返します。ただし、複数の引数が必要な場合はどうなりますか? それが、この例がカバーするものです。 funcfunc

function negate(func) {
  return function() {
    return !func.apply(null, arguments);
  };
}

この定義では、提供された引数のリストで呼び出し、結果を否定して返す、任意の数の引数のnegate(func)新しい関数を返します。func

于 2013-05-20T19:28:44.690 に答える
1

func本のその部分は、いくつかの関数が複数のパラメーターを取ることを説明するためのもの.apply()でしたfunc(x)

最初の例NaNでは、1 つのパラメーターを受け入れます。そのため、次のように使用できました。

return !func(x);

ただし、 などの一部の関数は、Math.min複数のパラメーターを受け入れます。技術的には、 を使用する場合negate、どの関数が渡されるのか、どの引数が渡されるのかわかりません。xしたがって、に渡す際にハードコードすることはできませんfunc。を使用すると、元の引数を呼び出し.apply()に渡すことができます。argumentsfunc

参照:

于 2013-05-20T19:29:03.693 に答える