JavaScriptが別の関数内の関数の書き込みをサポートしているのか、ネストされた関数をサポートしているのか疑問に思っています(ブログで読んでいます)。これは本当に可能ですか?実際、私はこれらを使用しましたが、この概念は不明です。私はこれについて本当に不明です-助けてください!
これは本当に可能ですか?.
はい。
function a(x) { // <-- function
function b(y) { // <-- inner function
return x + y; // <-- use variables from outer scope
}
return b; // <-- you can even return a function.
}
console.log(a(3)(4));
以下は厄介ですが、関数を他の種類のオブジェクトのように扱う方法を示すのに役立ちます。
var foo = function () { alert('default function'); }
function pickAFunction(a_or_b) {
var funcs = {
a: function () {
alert('a');
},
b: function () {
alert('b');
}
};
foo = funcs[a_or_b];
}
foo();
pickAFunction('a');
foo();
pickAFunction('b');
foo();
関数は、次のことができるファーストクラスオブジェクトです。
Kennyの例に基づいて作成するには:
function a(x) {
var w = function b(y) {
return x + y;
}
return w;
};
var returnedFunction = a(3);
alert(returnedFunction(2));
5で警告します。
はい、別の関数にネストされた関数を記述して呼び出すことができます。
これを試して:
function A(){
B(); //call should be B();
function B(){
}
}
変数として別の関数に渡した関数を返すことができるだけでなく、内部での計算だけでなく外部での定義にも使用できます。この例を参照してください。
function calculate(a,b,fn) {
var c = a * 3 + b + fn(a,b);
return c;
}
function sum(a,b) {
return a+b;
}
function product(a,b) {
return a*b;
}
document.write(calculate (10,20,sum)); //80
document.write(calculate (10,20,product)); //250