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 会导致问题。它可以运行可能导致意外副作用的任意代码,阻止编译器优化,并导致调试困难(因为它可以根据您传递的内容执行任何操作)。更多关于为什么 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 回答
-1

不知道哪个 JavaScript 版本支持这种语法,但您也可以尝试:

function abc(action) {
if (typeof(action) != 'function')
            return;
    action();

}

abc(() => console.log('A B C'));
于 2020-09-30T11:24:47.563 回答