web-dev-qa-db-fra.com

Appeler une fonction définie dans une autre fonction en Javascript

J'appelle une fonction sur un clic de bouton comme ceci:

<input type="button" onclick="outer();" value="ACTION">​

function outer() { 
    alert("hi");       
}

Cela fonctionne bien et je reçois une alerte:

Maintenant quand j'aime ça:

function outer() { 
    function inner() {
        alert("hi");
    }
}

Pourquoi je ne reçois pas d'alerte?

Bien que la fonction interne ait une portée disponible dans la fonction externe.

30
Mike

Le cadrage est correct comme vous l'avez noté. Cependant, vous n’appelez la fonction inner nulle part.

Vous pouvez faire soit:

function outer() { 

    // when you define it this way, the inner function will be accessible only from 
    // inside the outer function

    function inner() {
        alert("hi");
    }
    inner(); // call it
}

Ou

function outer() { 
    this.inner = function() {
        alert("hi");
    }
}

<input type="button" onclick="(new outer()).inner();" value="ACTION">​
36
techfoobar

Vous pouvez en faire un module et exposer votre fonction interne en le renvoyant dans un objet.

function outer() { 
    function inner() {
        console.log("hi");
    }
    return {
        inner: inner
    };
}
var foo = outer();
foo.inner();
35
Matt Holmes

Vous n’appelez pas la fonction inner, vous la définissez simplement.

function outer() { 
    function inner() {
        alert("hi");
    }

    inner(); //Call the inner function

}
6
Esailija

Vous pouvez également essayer ceci. Ici, vous retournez la fonction "à l'intérieur" et appelez-la avec le deuxième ensemble de parenthèses.

function outer() {
  return (function inside(){
    console.log("Inside inside function");
  });
}
outer()();

Ou

function outer2() {
    let inside = function inside(){
      console.log("Inside inside");
    };
    return inside;
  }
outer2()();
3
Tharzeez