Вызов функции, определенной внутри другой функции в Javascript

Я вызываю функцию на кнопке следующим образом:

<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()();