Je me demande si JavaScript supporte l'écriture d'une fonction dans une autre fonction, ou des fonctions imbriquées (je l'ai lu dans un blog). Est-ce vraiment possible? En fait, j'ai utilisé ces derniers mais je ne suis pas sûr de ce concept. Je ne suis pas très clair à ce sujet - s'il vous plaît aider!Pouvez-vous écrire des fonctions imbriquées en JavaScript?
Répondre
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();
grand exemple. J'ajouterais qu'il est important de noter que les fonctions définies à l'intérieur d'autres fonctions n'existent que dans cette étendue de fonctions (à moins, bien sûr, que vous lui assigniez une fonction globale, comme dans cet exemple). –
Traitez ces fonctions comme des objets –
Les fonctions sont des objets de première classe qui peuvent être:
- Définie au sein de votre fonction
- Créé comme toute autre variable ou un objet à tout moment dans votre fonction
- Retourné de votre fonction (ce qui peut sembler évident après les deux ci-dessus, mais toujours)
Pour construire 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));
Est-ce que vous alertera avec 5.
Cette méthode est appelée currying. – Yekver
Non seulement pouvez-vous retourner une fonction que vous avez passé dans une autre fonction comme variable, vous pouvez également l'utiliser pour le calcul à l'intérieur mais en le définissant à 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
je l'utilise avec ajax – jscripter
Oui, il est possible d'écrire et d'appeler une fonction imbriquée dans une autre fonction.
Essayez ceci:
function A(){
B(); //call should be B();
function B(){
}
}
Cette méthode est appelée "exécution". – Yekver
Woh! J'ai besoin de sédation après avoir vu ça! –