Kan du skriva nästlade funktioner i JavaScript?
Jag undrar om JavaScript stöder att skriva en funktion inom en annan funktion, eller nästlade funktioner (jag läste det i en blogg). Är detta verkligen möjligt? Faktum är att jag har använt dessa men är osäker på detta koncept. Jag är verkligen otydlig om detta -- snälla hjälp!
Svar #1
Är detta verkligen möjligt.
Ja.
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));Svar #2
Följande är elakt, men tjänar till att visa hur du kan behandla funktioner som vilket annat slags objekt som helst.
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();
Svar #3
Funktioner är objekt av första klass som kan:
- Definierad inom din funktion
- Skapas precis som vilken annan variabel eller objekt som helst vid vilken punkt som helst i din funktion
- Returnerade från din funktion (vilket kan verka självklart efter de två ovan, men ändå)
För att bygga vidare på exemplet som gavs av Kenny:
function a(x) {
var w = function b(y) {
return x + y;
}
return w;
};
var returnedFunction = a(3);
alert(returnedFunction(2));
Skulle varna dig med 5.
Svar #4
Ja, det är möjligt att skriva och anropa en funktion som är inbäddad i en annan funktion.
Prova detta:
function A(){
B(); //call should be B();
function B(){
}
}
Svar #5
Inte bara kan du returnera en funktion som du har skickat in i en annan funktion som en variabel, du kan också använda den för beräkning inuti men definiera den utanför. Se detta exempel:
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
