Je me demande si JavaScript prend en charge l'écriture d'une fonction au sein d'une autre fonction, ou de fonctions imbriquées (je l'ai lu dans un blog). Est-ce vraiment possible ? En fait, je les ai utilisés, mais je ne suis pas sûr de ce concept. Je ne suis vraiment pas clair à ce sujet -- s'il vous plaît, aidez-moi !
Réponses
Trop de publicités?Ce qui suit est désagréable, mais sert à démontrer comment vous pouvez traiter les 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 qui peuvent être :
- Défini dans votre fonction
- Créé comme n'importe quelle autre variable ou objet à n'importe quel moment de votre fonction
- Revenu de votre fonction (ce qui peut sembler évident après les deux ci-dessus, mais encore)
Pour développer 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 avertirait avec 5.
Non seulement vous pouvez retourner une fonction que vous avez passée dans une autre fonction en tant que variable, vous pouvez également l'utiliser pour le calcul à l'intérieur, mais la 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