52 Stimmen

Javascript-Aufruf verschachtelte Funktion

Ich habe das folgende Stück Code:

function initValidation()
{
    // irrelevant code here
    function validate(_block){
        // code here
    }
}

Gibt es eine Möglichkeit, wie ich die validate() Funktion außerhalb der initValidation() Funktion? Ich habe versucht, die Funktion validate() aber ich glaube, sie ist nur innerhalb der übergeordneten Funktion sichtbar.

1voto

Marius Mucenicu Punkte 1417

Ich weiß, dieser Thread ist hier seit geraumer Zeit, aber ich dachte, ich würde auch meine 0,02 $ auf, wie innere Funktionen von außerhalb ihres Anwendungsbereichs aufrufen (könnte jemand profitieren) verlassen.

Beachten Sie, dass an jedem Ort, eine bessere Design-Entscheidung in Betracht gezogen werden sollte als eine hakelige Umgehung, die sich später rächen wird .

Wie wäre es mit der Verwendung von Funktionsausdrücke anstelle von Funktionsanweisungen und die Nutzung der globale Reichweite .

      var innerFn;

      function outerFn() {
        innerFn = function(number) {
          return number ** 2;
        }
      }

      outerFn();
      console.log(innerFn(5));

      // if there's more complex code around and you could write this defensively

      if (typeof innerFn !== 'undefined') {
        console.log(`we are squaring the number 5 and the result is: ${innerFn(5)}`);
      } else {
        console.log('function is undefined');
      }

Oder Sie können Folgendes verwenden Verschlüsse :

function outer() {
  // initialize some parameters, do a bunch of stuff
  let x = 5, y = 10;

  function inner() {
    // keeps references alive to all arguments and parameters in all scopes it references
    return `The arithmetic mean of the 2 numbers is: ${(x + y) / 2}`;
  }

  return inner;
}

innerFn = outer(); // get a reference to the inner function which you can call from outside
console.log(innerFn());

1voto

Alfred Punkte 41

Erstellen Sie eine Variable außerhalb der übergeordneten Funktion, und speichern Sie dann in der übergeordneten Funktion Ihre gewünschte Funktion in der Variablen.

Var Store;
Function blah() {

    Function needed() {
        #
    }

   Store = needed;
}

0voto

Pete Lomax Punkte 73

Als kleine Abwandlung der Antwort von Esailija habe ich dies getan:

function createTree(somearg) {
    function validate(_block) {
        console.log( "test", _block );
    }
    if (somearg==="validate") { return validate; } // for addNodes

    // normal invocation code here
    validate(somearg);
}

function addNodes() {
    const validate = createTree("validate");
    //...
    validate( "hello" );
}

createTree("create");
addNodes();
//validate("illegal");

Somit ist validate() nun perfekt zwischen createTree() und addNodes() aufgeteilt und für die Außenwelt vollkommen unsichtbar.

-1voto

Shraddha J Punkte 644

Definition der Funktion:

function initValidation() {
   // code here
   function validate(_block){
     // code here
     console.log(_block);
   }
   return validate;
}

Rufen Sie es wie folgt auf:

initValidation()("hello");

-2voto

Carl Bergquist Punkte 3866

Sollte funktionieren.

function initValudation() {
    validate();
    function validate() {

    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X