私が苦労しているサンプルコードは次のとおりです。
function greaterThan(x) {
return function(y) {
return y > x;
};
}
var greaterThanTen = greaterThan(10);
show(greaterThanTen(9));
それを数学的に表現したり、流れに沿ったりする方法はありますか? なぜ10がxで9がyなのかわかりません。
私が苦労しているサンプルコードは次のとおりです。
function greaterThan(x) {
return function(y) {
return y > x;
};
}
var greaterThanTen = greaterThan(10);
show(greaterThanTen(9));
それを数学的に表現したり、流れに沿ったりする方法はありますか? なぜ10がxで9がyなのかわかりません。
行で:
var greaterThanTen = greaterThan(10);
変数 x を値 10 に割り当ててから、後で呼び出されるように関数を greaterThanTen 変数に格納します。この意味は:
greaterThanTen = function(y) {
return y > 10;
};
だからあなたがするとき:
greaterThanTen(9); #y = 9
あなたが呼んでいる:
return 9 > 10;
この関数は関数を呼び出すのではなく、関数を返します。
このコードは、元の2 項(より大きい) 演算子の右側のオペランドが特定の値に事前にバインドされている新しい単項関数を作成しています。
ラムダ計算では、このバインディングはカリー化として知られています。
x
Javascript では、パラメーターの指定された値が、greaterThan
返される内部関数 (または「クロージャー」) のスコープに永続的に保持されるため、バインディングが発生します。
だから、あなたが呼び出すとき:
var greaterThanTen = greaterThan(10);
これで、単一のパラメーターを常に10 のバインドされた値と比較する新しい関数 ( という名前greaterThanTen
) ができました。
したがって:
greaterThanTen(9);
戻りfalse
ます。
greaterThan(10)
function(y){return y > x}
したがって、 を呼び出すと、関数はローカル変数が 10 に設定されgreaterThan(10)
た関数を返します。x
var greaterThanTen = greaterThan(10)
等しい:
var greaterThanTen = function(y){return y > 10};
最後に、greaterThanTen(9)
が呼び出され、これは に等しく9 > 10
、これは false です。
greaterThanが行う唯一のことは、 xの値を設定することです。
function(y) {return (y>x);}
結果の関数を変数名 (この場合はgreaterThanTen ) に保存します。
function(y) {return (y>10);}
greaterTenTen(9)を呼び出すことは、以下を参照することと同じです。
関数 (y = 9) {リターン (y>10);}
これはと同じです
関数 (y = 9) {リターン (9>10);}
これは誤りです。したがって、 falseが返されます。
編集:
関数を返す関数の例はこちら: http://i.imgur.com/aiHSH.jpg (y>x で x と y が入れ替わる)
ナマステ
このgreaterThanTen
変数は、1 つの引数を取り、この引数が 10 より大きい場合にブール値を返す関数を表します。