Я вызываю функцию на кнопке следующим образом:
<input type="button" onclick="outer();" value="ACTION">
function outer() {
alert("hi");
}
Он отлично работает, и я получаю предупреждение:
Теперь, когда мне это нравится:
function outer() {
function inner() {
alert("hi");
}
}
Почему я не получаю предупреждение?
Хотя внутренняя функция имеет объем, доступный во внешней функции.
Ответ 1
Как вы отметили, область обзора правильна. Однако вы не вызываете 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">
Ответ 2
Вы можете сделать это в модуль и выставить свою внутреннюю функцию, вернув его в Object.
function outer() {
function inner() {
console.log("hi");
}
return {
inner: inner
};
}
var foo = outer();
foo.inner();
Ответ 3
Вы не называете функцию inner
, просто определяя ее.
function outer() {
function inner() {
alert("hi");
}
inner(); //Call the inner function
}
Ответ 4
Вы также можете попробовать это. Здесь вы возвращаете функцию "внутри" и ссылаетесь на второй набор скобок.
function outer() {
return (function inside(){
console.log("Inside inside function");
});
}
outer()();
Или
function outer2() {
let inside = function inside(){
console.log("Inside inside");
};
return inside;
}
outer2()();