Kun je geneste functies in JavaScript schrijven?

Ik vraag me af of JavaScript het schrijven van een functie binnen een andere functie ondersteunt, of geneste functies (ik las het in een blog). Is dit echt mogelijk?. Ik heb deze zelfs gebruikt, maar ben niet zeker van dit concept. Ik ben hier erg onduidelijk over — help alstublieft!


Antwoord 1, autoriteit 100%

Is dit echt mogelijk.

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

Antwoord 2, autoriteit 14%

Het volgende is vervelend, maar dient om te demonstreren hoe u functies kunt behandelen zoals elk ander soort object.

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

Antwoord 3, autoriteit 9%

Functies zijn eersteklas objecten die kunnen zijn:

  • Gedefinieerd binnen uw functie
  • Gemaakt net als elke andere variabele of object op elk punt in uw functie
  • Teruggekeerd van je functie (wat misschien vanzelfsprekend lijkt na de twee hierboven, maar toch)

Om voort te bouwen op het voorbeeld van Kenny:

  function a(x) {
      var w = function b(y) {
        return x + y;
      }
      return w;
   };
   var returnedFunction = a(3);
   alert(returnedFunction(2));

Zou je waarschuwen met 5.


Antwoord 4, autoriteit 6%

Ja, het is mogelijk om een functie te schrijven en aan te roepen die in een andere functie is genest.

Probeer dit:

function A(){
   B(); //call should be B();
   function B(){
   }
}

Antwoord 5, autoriteit 5%

Je kunt niet alleen een functie teruggeven die je als variabele aan een andere functie hebt doorgegeven, je kunt hem ook gebruiken voor berekeningen binnen, maar buiten definiëren. Zie dit voorbeeld:

   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

Other episodes