2010-07-09 10 views
71

Ich frage mich, ob JavaScript unterstützt das Schreiben einer Funktion innerhalb einer anderen Funktion oder verschachtelte Funktionen (ich las es in einem Blog). Ist das wirklich möglich? Tatsächlich habe ich diese verwendet, bin mir aber über dieses Konzept nicht sicher. Ich bin darüber wirklich unschlüssig - bitte helfen Sie!Können Sie verschachtelte Funktionen in JavaScript schreiben?

Antwort

142

Ist das wirklich möglich.

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

+11

Diese Methode wird Curry genannt. – Yekver

+29

Woh! Ich brauche eine Beruhigung, nachdem ich das gesehen habe! –

24

Das Folgende ist böse, aber dient dazu, zu demonstrieren, wie Sie Funktionen wie jede andere Art von Objekt behandeln können.

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

gutes Beispiel. Ich möchte hinzufügen, dass es wichtig ist, darauf hinzuweisen, dass Funktionen, die in anderen Funktionen definiert sind, nur in diesem Funktionsbereich existieren (es sei denn, Sie weisen diesem Beispiel eine globale Funktion zu). –

+2

Behandeln Sie diese Funktionen wie Objekte, die sie sind –

11

Funktionen sind erstklassige Objekte, die sein kann:

  • Defined in Ihrer Funktion
  • Erstellt wie jede andere Variable oder ein Objekt an einer beliebigen Stelle in Ihrer Funktion
  • Zurückgegeben von Ihrer Funktion (die nach den beiden oben offensichtlich erscheinen mag, aber immer noch)

am Beispiel von Kenny gegeben bauen:

function a(x) { 
     var w = function b(y) { 
     return x + y; 
     } 
     return w; 
    }; 

    var returnedFunction = a(3); 
    alert(returnedFunction(2)); 

alarmieren Möchten Sie mit 5.

+2

Diese Methode wird Curry genannt. – Yekver

7

Sie können nicht nur eine Funktion zurück, die Sie in eine andere Funktion als eine Variable übergeben haben, Sie können es auch zur Berechnung innerhalb verwenden, aber außerhalb definieren. Sehen Sie folgendes Beispiel:

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 
+1

verwende ich das mit Ajax – jscripter

9

Ja, es möglich ist, in einer anderen Funktion eine Funktion verschachtelt zu schreiben und zu rufen.

Versuchen Sie folgendes:

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

    } 
} 
Verwandte Themen