Je me demande si JavaScript prend en charge l'écriture d'une fonction dans une autre fonction ou de fonctions imbriquées (je l'ai lue dans un blog). Est-ce vraiment possible? En fait, j'ai utilisé ceux-ci mais je ne suis pas sûr de ce concept. Je ne suis vraiment pas clair sur ceci - aide s'il vous plaît!
Est-ce vraiment possible?.
Oui.
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));
Ce qui suit est méchant, mais sert à démontrer comment vous pouvez traiter des fonctions comme n'importe quel autre type d'objet.
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();
Les fonctions sont des objets de première classe pouvant être:
Pour reprendre l’exemple donné par Kenny:
function a(x) {
var w = function b(y) {
return x + y;
}
return w;
};
var returnedFunction = a(3);
alert(returnedFunction(2));
Vous alerterais avec 5.
Oui, il est possible d'écrire et d'appeler une fonction imbriquée dans une autre fonction.
Essaye ça:
function A(){
B(); //call should be B();
function B(){
}
}
Non seulement vous pouvez renvoyer une fonction que vous avez passée dans une autre fonction en tant que variable, mais vous pouvez également l'utiliser pour calculer à l'intérieur mais pour le définir à l'extérieur. Voir cet exemple:
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