1

次のような 2 つの関数があるとします。

function main(Index)
{
    doStuff();
}

function doStuff()
{
    if(Index == 1)
    {
        document.write("Hello world!")
    }
}

そしていくつかのHTML:

<input type="button" value="Click me" onclick="main(1)" />

これは、関数固有の変数などを使用する非常にばかげた方法だと認識していますが、それは単なる好奇心からです。Index関数からmain関数に変数を渡すことは可能doStuffですか?

4

3 に答える 3

1

変数 Index を main 関数から doStuff 関数に渡すことは可能ですか?

いいえ、パラメータとして明示的に渡さなければ、そうではありませんdoStuffdoStuffパラメータを受け入れる必要があるか、argumentsコレクションを利用できます。

function main(index)
{
    doStuff(index);
}

function doStuff()
{
    var index = arguments[0];

    if(index == 1)
    {
        document.write("Hello world!")
    }
}
于 2012-11-10T15:27:30.183 に答える
1

これが唯一の方法です:

function doStuff(Index)
{
    if(Index == 1)
    {
        document.write("Hello world!")
    }
}

またはそれをグローバル変数にする

于 2012-11-10T15:27:31.953 に答える
1

なぜその呼び出しをDoStuff関数にシフトしているのですか?

イベントに反応して「何かをする」のがポイントではありませMainんか?

その場合は、次のように、その機能をそのままにしておく必要がありますMain

function Main(index){
    switch (index){
        case 1:
            DoStuff();
            break;
        case 2:
            DoStuff2();
            break;
        default:
            DoStuff(); //Because, why not?
    {
}

function DoStuff(){
    document.write("Hello, world!");
}

function DoStuff2() {//something else happens here}

オブジェクトとして使用Mainしていないため、永続化の必要はありません (私の知る限り)。不要な電話を切るだけで、あなたの生活はよりシンプルになります。ただし、この種の機能を実現したい場合は、単純なクロージャーを作成できます。次のようになります。

<input type="button" onclick="Main(1);" value="Do Something" />

<script type="text/javascript">
function Main(index) {

    //This function only exists within the scope of Main
    function DoStuff() {

        //But now it has the added benefit of knowing about index
        switch (index) {
        case 1:
            alert("Hello, world!");
            break;
        case 2:
            alert("Not, really. I'm mad.");
            break;
        default:
            alert("Hello, world!");
        }
    }

    //Now Main is going to call it's internal function and...
    DoStuff();
}
</script>

DoStuffの本体内で宣言したため、 のレキシカル スコープ内に存在し、そのすべてのメンバーにアクセスできることMainを意味します。クロージャは非常に強力ですが、悪用するのは簡単です。この種の機能が本当に必要な場合は、この方法をお勧めしますが、それ以外の場合は KISS (Keep It Simple Sir) をお勧めします。DoStuffMain

于 2012-11-10T16:35:13.340 に答える