2

私は自分の問題を説明することができましたが、それを実証する方がおそらく簡単です...

http://jsfiddle.net/XxT2B/を見ると、私の問題が表示されます。アクションを関数に渡す方法がわかりません。あなたは私が何を意味するかを見るでしょう。

関数を呼び出すものによってアクションが異なる可能性があることに注意してください。アクションは、時間通りのアラートであり、次のアラートとは異なる場合があります。

これが私のコードです...

function abc(action)
{
    //Do a bunch of stuff first and then do the action sent to this function
    alert('This function is named "abc"');

    //This is the part I do not know how to do.
    //The action might be an alert or something totally different so I can't just pass text
    //I need to know how to execute the action passed.
    action;
}

abc('alert("I like pizza")');
4

6 に答える 6

5

関数をパラメーターとして別の関数に渡すことができます。

function abc(action)
{
    //Do a bunch of stuff first and then do the action sent to this function
    alert('This function is named "abc"');

    action();
}

abc(function(){
    alert("I like pizza");
});
于 2013-04-04T17:44:37.897 に答える
2

関数を に渡すことができますが、abc()必ずサニタイズしてください

function abc(action)
{
    alert('This function is named "abc"');

    if(typeof(action) == "function") { //sanitize
        action();
    }
}

abc('alert("I like pizza")'); //will execute without a problem
abc(50); //will not run, since 50 is not a function
于 2013-04-04T18:11:42.787 に答える
1

関数をインスタンス化するだけです:

abc(function() { alert("I like pizza"); });

編集してから呼び出すには、パラメーターの値を関数名とまったく同じように使用します (なぜなら、そうです!):

  action();
于 2013-04-04T17:43:57.417 に答える
1

良い方法:

関数として渡します。

function abc(action)
{
    //Do a bunch of stuff first and then do the action sent to this function
    alert('This function is named "abc"');

    action();
}

abc(function(){alert("I like pizza")});

悪い方法 (アクションが文字列である必要がある場合):

function abc(action)
{
    //Do a bunch of stuff first and then do the action sent to this function
    alert('This function is named "abc"');

    eval(action);
}

abc('alert("I like pizza")');

eval は問題を引き起こすため、2 番目の方法は推奨されません。予期しない副作用を引き起こす可能性のある任意のコードを実行し、コンパイラの最適化を妨げ、デバッグを困難にする可能性があります (渡す内容に応じて文字通り何でもできるため)。eval が悪い理由については、こちらをご覧ください。

しかし、あなたが求めていたように、JavaScriptコードとして任意の文字列を実行します。

于 2013-04-04T17:46:01.630 に答える
-1

eval次の方法を使用できます。

function abc(action)
{
    //Do a bunch of stuff first and then do the action sent to this function
    alert('This function is named "abc"');

    eval(action);
}

abc('alert("I like pizza")');

そして、それはそれです。

于 2013-04-04T17:46:00.230 に答える