私は本を読んで、Javascriptを学ぶためにEloquentを読んでいます。私はこの例に遭遇しましたjavascriptの高次関数
function unless(test, then) {
if (!test) then();
}
function repeat(times, body) {
for (var i = 0; i < times ; i++) body(i);
}
repeat(3, function (n) {
unless(n % 2, function() {
console.log(n, " is even ");
});
});
// → 0 is even
// → 2 is even
私は関数が引数として渡され、互いに内部にある可能性があることを知っています。 then()
とbody()
の機能はありますか?それらはどこに定義されていますか? n
の値は何ですか?
'then'と' body'は引数に与えられた名前です。コードはそれらが関数であると想定しています(あなたが何か他のものを渡すと劇的に失敗します)。この場合、関数は*関数なので、うまく動作します。それらは、* call *自体の引数リストで定義されています。 –
nの値は何ですか?彼らが "function(n)"を宣言している場合、名前を持つはずの関数ではありませんか?そうでない場合のパラメータと同じ! –
* "nの値は何ですか?" *関数に渡されるものは何でも。関数が呼び出される場所を見てください。 * "関数は名前を持つはずの関数ではありません" *関数は名前を持つ必要はありません。関数を渡すと、パラメータの働きは突然変化しません。最も単純な例: 'function foo(n){console.log(n);} }; foo(5); foo(function(){}); '最初の呼び出しでは、 'n'は値 '5'を、2番目の呼び出しでは' n'は関数を参照します。 –