132 votes

Pouvez-vous écrire des fonctions imbriquées en JavaScript ?

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 !

223voto

KennyTM Points 232647

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));

32voto

Quentin Points 325526

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();

21voto

altCognito Points 23944

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.

15voto

user3261767 Points 21

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(){

   }
}

12voto

Stefan Gruenwald Points 494

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X