私はフロントエンドのWeb開発を自習しているグラフィックデザイナーです。私はHTMLとCSSに関するすべての記事を読み終えました。今私はJavaScript、特にMarijn Haverbeke(2011)のEloquent JavaScriptという本について読んでいます。彼は多くの説明せずにこの例を与える関数クロージャのトピックに関する:2つの値がJavaScriptの1つの引数で強制されますか?
function makeAdder(amount) {
return function(number) {
return number + amount;
};
}
var addTwo = makeAdder(2);
addTwo(3);
-> 5
私がここで理解していないが、それはの体内無名の機能function(number)
内にあるとき、変数number
は、値が与えられている方法です機能makeAdder()
。 makeAdder()
関数は、1つの引数amount
を受け入れます。これはmakeAdder(2)
に値 "2"が与えられ、可変定義はaddTwo
です。
しかし、その後、変数addTwo
は今、これについては本当に奇妙いただきましたがaddTwo
関数に与えられた3の値が何らかの形で使用されてしまった方法です、それは関数であるかのように、その後実行され、3の異なる値を与えています(2)、及び最後に5
基本的に 'makeAdder(2)'が呼び出されると、それは新しい関数を返すだけで、その関数は_amount_(2に設定)の値を知ります。次に、新たに作成された関数が3を引数として呼び出されます。この時点で、 'addTwo'は_number + amount_(3 + 2)を合計することができます。 パラメータなしで 'makeAdder()'を呼び出すと、 'addTwo(3)'を試してみると、 'addTwo'は' undefined'値(_3_ + _undefined_ = _NaN_)を持つため、 'NaN'を返します。 – aUXcoder