如何编写接受callBack函数并以"安全"方式运行的函数?

pen*_*ake 10 javascript eval callback code-injection

我想写这样一个函数:

function doGoodJob(someId, callBackfunction){

// some stuff with someId

// todo: RUN callBackFunction here

}
Run Code Online (Sandbox Code Playgroud)

他们说eval在代码注入方面是"危险的".

那么,编写一个接受回调函数并安全运行它的JavaScript函数的最佳做法是什么?

Ric*_*end 24

你的回调是字符串还是实际函数?

如果它的功能..

function doGoodJob(someId,callbackFunction)
{
     callbackFunction();
}

doGoodJob(1,function(){alert('callback');});
Run Code Online (Sandbox Code Playgroud)

如果是字符串,则可以使用Function构造函数.

function doGoodJob(someId,callbackFunction)
{
     var func = new Function(callbackFunction)
     func();
}
doGoodJob(1,"alert('test');");
Run Code Online (Sandbox Code Playgroud)

或测试两者..

function doGoodJob(someId,callbackFunction)
{
    var func = (typeof callbackFunction == 'function') ?
        callbackFunction : new Function(callbackFunction);

     func();   
}

doGoodJob(1,function(){alert('callback');});
doGoodJob(1,"alert('test');");
Run Code Online (Sandbox Code Playgroud)