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.
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">
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();
Vous n’appelez pas la fonction inner
, vous la définissez simplement.
function outer() {
function inner() {
alert("hi");
}
inner(); //Call the inner function
}
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()();