私はこのようなボタンをクリックして関数を呼び出しています:
<input type="button" onclick="outer();" value="ACTION">
function outer() {
alert("hi");
}
それはうまく機能し、アラートを受け取ります:
今、私はこれが好きなとき:
function outer() {
function inner() {
alert("hi");
}
}
アラートが表示されないのはなぜですか?
ただし、内部関数には外部関数で使用可能なスコープがあります。
ご指摘のとおり、スコープは正しいです。ただし、inner
関数をどこでも呼び出していません。
次のいずれかを実行できます。
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
}
または
function outer() {
this.inner = function() {
alert("hi");
}
}
<input type="button" onclick="(new outer()).inner();" value="ACTION">
これをモジュールにして、Objectに返すことで内部関数を公開できます。
function outer() {
function inner() {
console.log("hi");
}
return {
inner: inner
};
}
var foo = outer();
foo.inner();
関数inner
を呼び出すのではなく、定義するだけです。
function outer() {
function inner() {
alert("hi");
}
inner(); //Call the inner function
}
これを試すこともできます。ここでは、関数の「内部」を返し、2番目のかっこで呼び出しています。
function outer() {
return (function inside(){
console.log("Inside inside function");
});
}
outer()();
または
function outer2() {
let inside = function inside(){
console.log("Inside inside");
};
return inside;
}
outer2()();