我想写这样一个函数:
function doGoodJob(someId, callBackfunction){
// some stuff with someId
// todo: RUN callBackFunction here
}
他们说eval在代码注入方面是“危险的”。
那么,编写一个接受回调函数并安全运行它的JavaScript函数的最佳做法是什么?
答案 0 :(得分:24)
您的回调是字符串还是实际功能?
如果它是一个功能..
function doGoodJob(someId,callbackFunction)
{
callbackFunction();
}
doGoodJob(1,function(){alert('callback');});
如果是字符串,则可以使用Function构造函数。
function doGoodJob(someId,callbackFunction)
{
var func = new Function(callbackFunction)
func();
}
doGoodJob(1,"alert('test');");
或测试两者..
function doGoodJob(someId,callbackFunction)
{
var func = (typeof callbackFunction == 'function') ?
callbackFunction : new Function(callbackFunction);
func();
}
doGoodJob(1,function(){alert('callback');});
doGoodJob(1,"alert('test');");
答案 1 :(得分:2)
这应该有效:
function doGoodJob(simeOd, callBackFunction){
/** Do stuff **/
callBackFunction();
}
答案 2 :(得分:2)
doGoodJob(1, "someCallbackFunction");
function someCallBackFunction() {
alert("im called");
}
相反,如果使用eval(callbackFunction),如下所示
function doGoodJob(someId,callbackFunction) {
var func = (typeof callbackFunction == 'function') ?
callbackFunction : eval(callbackFunction);
func();
}
doGoodJob(1,someCallBackFunction);
doGoodJob(1,"someCallBackFunction");
答案 3 :(得分:0)
回调函数意味着函数传递作为参数,就像我们传递变量一样。
当调用回调函数时,我们可以像下面这样使用它:
<script>
function callbackExample(arg1, callback){
alert(arg1);
var x = 10, y = 20;
if (callback && typeof(callback) === "function") {
callback(x+y);
}
}
callbackExample("test", function(res){
alert("This is the callback function..." + res);
});
</script>