44

次のようにボタンクリックで関数を呼び出しています:

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

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

正常に動作し、アラートが表示されます。

今、私がこのようにすると:

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

アラートが届かないのはなぜですか?

内部関数には外部関数で使用可能なスコープがありますが。

4

10 に答える 10

60

あなたが指摘したように、スコープは正しいです。ただし、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">​
于 2012-11-04T12:23:47.137 に答える
8

function を呼び出しているのではなくinner、定義しているだけです。

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

    inner(); //Call the inner function

}
于 2012-11-04T12:23:35.887 に答える